with关联查询
只关联一个表
->with('');
//或
->with(['']);
关联多个表
->with(['','']);
对关联表添加筛选条件,使用闭包函数
->with(['','' => function(ActivityQuery $query) {
$query->where();
}]);
对关联表添加筛选条件,且使用了外部变量
$param = '';
->with(['' => function(ActivityQuery $query) use($param) {
$query->where();
}]);
多级关联一:
->with(['goodsSku']);
//模型中
public function getGoodsSku()
{
return $this->hasOne(GoodsSku::className(),['goods_sku_code' => 'goods_sku_code'])->with(['category','categoryItem']);
}
多级关联二:
->with(['goodsSku.category']);
多及关联三:
->with(['goodsSku' => function(ActivityQuery $query) {
$query->with(['category']);
}]);
和laravel的用法一样的。如果打印SQL就会发现with
其实是利用外层查询结果中关联字段,以in
条件查询的。也就是分两次查询的。
建议只在外层查询多个的情况下使用。如外层只查了一个with
里面多个,最好还是分开两次查吧,不要使用with
。因为in
里面只有一个值的话效率就还不如直接=
了。