学习Yii2:急切地加载许多关系

时间:2016-04-07 10:17:49

标签: activerecord yii2

查看此链接: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,得到的结果相同。

为什么?

1 个答案:

答案 0 :(得分:0)

找到了解决方案。

我的关系是在客户模型中宣布的。

我在Colors模型中声明的那一刻,它起作用了。

谢谢@InsaneSkull的帮助。