return $Model->getList($where, $page, $limit, '*', ['BrandName', 'StoreName', 'ProductNmae', 'ProductInfo' => function ($query) {
$query->with(['CateName', 'UnitInfo']);
}]);
如上代码
模型->with(['BrandName', 'StoreName', 'ProductNmae', 'ProductInfo' => function ($query) {
$query->with(['CateName', 'UnitInfo']);
}])->select();
在进行模型查询的时候 可以通过当前模型的关联方法.关联模型的关联方法 这样去单个执行多层模型方法的调用
但是对于需要调用指定模型下两个的冠梁方法就操蛋了 可以使用下面的
场景:根据订单表里面的product_id关联商品表、然后根据商品表里面的分类id和单位id分别取出单位名称和分类名称
在订单模型定义关联方法ProductInfo 然后商品表里面定义两个关联方法CateName、UnitInfo
这时候使用关联查询的时候ProductInfo.CateName,ProductInfo.UnitInfo就不行了 因为后面的ProductInfo.UnitInfo会覆盖前面的CateName的数据
所以像第一段代码 在关联查询的时候 使用一个闭包调用订单表的ProductInfo方法闭包里面再调用商品模型的CateName、UnitInfo方法即可解决 同时还可以使用bind方法
完整代码如下
订单模型
public function ProductInfo()
{
// 参数说明:
// 1. 关联的模型类名:Product::class 表示关联到 Product 模型
// 2. 外键名称:'product_id' 表示订单表中用于关联商品表的外键字段
// 3. 关联主键名称:'id' 表示商品表中的主键字段,默认情况下是 'id'
return $this->hasOne(StoreProduct::class, 'id', 'product_id')->field('id,store_name,cate_id,unit_id')->bind(['CateName' => 'CateName', 'UnitInfo' => 'UnitInfo', 'store_name' => 'store_name']);
}
商品模型
public function CateName()
{
return $this->hasOne(StoreCategory::class, 'id', 'cate_id')->field('id,cate_name')->bind(['CateName' => 'cate_name']);
}
public function UnitInfo()
{
return $this->hasOne(SystemGroupData::class, 'id', 'unit_id')->field('id,value')->bind(['UnitInfo' => 'value']);
}