查看此链接:Yii2 Active Record
在此部分:
当急切地加载关系时,您可以使用匿名函数自定义相应的关系查询。例如,
// find customers and bring back together their country and active orders
// SELECT * FROM `customer`
// SELECT * FROM `country` WHERE `id` IN (...)
// SELECT * FROM `order` WHERE `customer_id` IN (...) AND `status` = 1
$customers = Customer::find()->with([
'country',
'orders' => function ($query) {
$query->andWhere(['status' => Order::STATUS_ACTIVE]);
},
])->all();
我有3张桌子:
customers:Fields:customer_id,customer_name
colors:Fields:color_id,color_name
customer_colors:字段:id,color_customer_id,color_color_id
客户1连接颜色:紫色和橙色 客户2连接颜色:橙色
我试图通过此代码让所有拥有橙色颜色的客户:
$data = Customers::find()->with([
'colors' => function($query) {
$query->andWhere(['color_name' => 'Orange']);
}
])->all();
我得到的结果包括所有顾客,无论他们有什么颜色或没有颜色。
我还尝试使用color_id
代替color_name
,得到的结果相同。
为什么?
答案 0 :(得分:0)
找到了解决方案。
我的关系是在客户模型中宣布的。
我在Colors模型中声明的那一刻,它起作用了。
谢谢@InsaneSkull的帮助。