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']);
    }
Last modification:April 28, 2024
反正也没人会打赏