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一致
完。