Activerecord 学习Yii2:多对多关系急切加载

Activerecord 学习Yii2:多对多关系急切加载,activerecord,yii2,Activerecord,Yii2,查看此链接: 在本节: 当急切地加载关系时,可以使用匿名函数自定义相应的关系查询。比如说, 我有三张桌子: 客户:字段:客户id、客户名称 颜色:字段:颜色id、颜色名称 客户颜色:字段:id、颜色客户id、颜色颜色id 客户1连接到颜色:紫色和橙色 客户2连接到颜色:橙色 我正试图让所有拥有橙色代码的客户: $data = Customers::find()->with([ 'colors' => function($query) {

查看此链接:

在本节:

当急切地加载关系时,可以使用匿名函数自定义相应的关系查询。比如说,

我有三张桌子:

客户:字段:客户id、客户名称

颜色:字段:颜色id、颜色名称

客户颜色:字段:id、颜色客户id、颜色颜色id

客户1连接到颜色:紫色和橙色 客户2连接到颜色:橙色

我正试图让所有拥有橙色代码的客户:

$data = Customers::find()->with([
            'colors' => function($query) {
                $query->andWhere(['color_name' => 'Orange']);
            }
        ])->all();
我得到的结果是所有的顾客都在里面,不管他们有或没有什么颜色

我还尝试使用
color\u id
而不是
color\u name
,得到了相同的结果

为什么会这样?

找到了解决办法

我的关系在客户模型中声明

我在颜色模型中声明它的那一刻,它就成功了


谢谢@Inaseskull的帮助。

尝试
joinWith()
而不是
with()
@Inaseskull谢谢你,但我试图理解他们的例子为什么不起作用。而不是如何以不同的方式去做。他们不使用joinWith,而是使用with。有什么意义?如果它什么都不做,在哪里?是的,
with()
也可以工作,显示生成的关系。
$data = Customers::find()->with([
            'colors' => function($query) {
                $query->andWhere(['color_name' => 'Orange']);
            }
        ])->all();