获取所有当前连接到 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
条件。
有没有办法从查询中获取所有连接的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
条件。