with()和joinWith()在hasMany中的用法

1.先创建order和customer表

2.Customer模型代码段

<?php
    public function getOrder(){
        return $this->hasMany(Order::className(),['user_id'=>'id']); // user_id为Order模型字段
    }

3.with()

<?php
    $data = Customer::find()->with(['order'=>function($q){
               $q->andWhere('pay_status = 0');    // pay_status 为Order模型字段
            }])
		    ->asArray()
		    ->all();

sql语句打印:

SELECT * FROM `yp_customer`
SELECT * FROM `order` WHERE `user_id` IN (1,2) AND `pay_status` = 0

输出结果:

4.joinWith()

<?php
    $r = Customer::find()->joinWith(['order'=>function($q){
            $q->andWhere('pay_status = 0');
         }])
         ->asArray()
         ->all();
    var_dump($r);
    

sql语句打印:

SELECT
	`yp_customer`.*
FROM
	`yp_customer`
LEFT JOIN `yp_order` ON `yp_customer`.`id` = `yp_order`.`user_id`
WHERE
	pay_status = 0

输出语句:

5.结论

1.with()只能查询和检索主模型(主表)类,而joinWith()能连接主模型和关联模型(副表)的数据来检索主模型

2.joinWith 根据条件筛选完副表的数据后,主表的数据也会自动被筛选

3.with 根据条件筛选完主表后,副表不做任何条件的筛选

其他:hasone 测试结果和hasmany一致

完。

 

 

おすすめ

転載: blog.csdn.net/qq_24973351/article/details/114002504