在Order数据模型中:
public function getAdress(){
//adress和id都是子表的部分
return $this->hasOne(Adress::className(),['id'=>'adressid']);
}
public function getUser(){
return $this->hasOne(User::className(),['userid'=>'userid']);
}
在控制器中:
//使用join进行连表查询(LEFT JOIN 左关联)
$orderInfoList = Order::find()
->select('shop_order.sn ,shop_user.username,shop_adress.consignee,shop_adress.telephone,shop_adress.adress,shop_order.amount,shop_order.orderstatus,shop_order.pay,shop_order.createtime,shop_order.finishtime')
->joinWith('adress')
->joinWith('user')
->orderBy('shop_order.createtime DESC');
//var_dump($orderInfoList);exit();
//$count = $orderInfoList->count();
//输出生成的SQL语句
$query = clone $orderInfoList;
echo $query->createCommand()->getRawSql();
//输出查询的结果
$m = $orderInfoList->all();
var_dump($m);exit();
这样写是可以查询的,使用echo $query->createCommand()->getRawSql();输出的数据库语句也是正确的:
SELECT `shop_order`.`sn`, `shop_user`.`username`, `shop_adress`.`consignee`, `shop_adress`.`telephone`, `shop_adress`.`adress`, `shop_order`.`amount`, `shop_order`.`orderstatus`, `shop_order`.`pay`, `shop_order`.`createtime`, `shop_order`.`finishtime`
FROM `shop_order` LEFT JOIN `shop_adress` ON `shop_order`.`adressid` = `shop_adress`.`id` LEFT JOIN `shop_user` ON `shop_order`.`userid` = `shop_user`.`userid`
ORDER BY `shop_order`.`createtime` DESC
从输出的数据库语句中可以看到语句中有子表的信息,我放到数据库软件中运行也可以查到对应的数据,但是目前的问题就是当我使用 $orderInfoList->all();进行全部数据查询时,不显示子表的信息
即:使用all()运行的结果就是会只有主表的信息(只有Order表的信息,没有adress和user表的信息)
希望能有大神解答,十分感谢!
你应该去看一下all方法的内部实现是不是过滤掉了非当前model的其他属性