获取所有当前连接到 yii2 ActiveQuery 中的查询

Get all current joins to a query in yii2 ActiveQuery

有没有办法从查询中获取所有连接的table?

例如:

query = Account::find()->joinWith(['gallery'])->joinWith(['articles'])->etc...

yii2 中是否有任何集成方法可以 return 上面加入的 tables(或者我可以挂钩以手动获取它们的事件)?

ActiveQuery class 有 joinWith public 属性。它是一个包含所有连接信息的数组。除其他外,它还包含连接的 table 个名称。

更多信息here

@Beowulfenator 建议的解决方案仅显示与关系的连接(使用 joinWith() 方法添加。

要显示所有联接,您需要像这样准备查询:

$query = Account::find()
    ->join('...', '...')
    ->joinWith(['gallery', 'articles']); // By the way, you can reduce you code like this

$query->prepare();

这会将 yii\db\ActiveQuery 转换为简单的 yii\db\Query,它没有 joinWith 属性 但有 join 属性 可以准确显示所有加入。

您可以 var_dump 并查看它:

var_dump($query->join);
exit();

第一个元素存储连接类型,第二个 - table 名称(请注意,它可以是字符串或数组,具体取决于使用的关系),第三个 - on 条件。