首页 > 解决方案 > 雄辩的嵌套复杂关系

问题描述

我在链接关系方面遇到了一些麻烦。我想链接其中三个,但这不能正常工作:

    return UserModel::with('cars.pieces.attributes')

我想用汽车检索用户。他选择了一辆有零件的汽车,并且为每个零件选择了一个属性。

只有cars.pieces.我有我的用户,然后是汽车阵列,然后是这辆车的零件阵列。当我添加属性时,我拥有的不是用户汽车的属性,而是汽车的属性。

似乎关系只是在寻找以前的关系而不是整个数据包。

    public function cars(){
        return $this->belongsToMany(CarsModel::class, 'user_cars', 'id_user','id_cars');
    }

然后

    public function pieces(){
        return $this->belongsToMany(PiecesModel::class, 'cars_pieces', 'id_cars','id_pieces')
    }

最后:

    public function attributes(){
        return $this->belongsToMany(AttributeModel::class, 'user_cars_pieces_attributes', 'id_attribute', 'id_piece')
    }

最后一个实体使用 4 个字段作为主键:

id_user, id_car, id_attribute, id_piece

有什么方法可以检索用户汽车的属性?

感谢您的帮助!

标签: phplaravel

解决方案


您可以将函数传递给您的急切加载属性:

return UserModel::with(['cars.pieces.attributes' => function ($query) {
    $query->where('id_user', DB::raw('users.id'))->where('id_car', DB::raw('cars.id'));
}]);

我没有对此进行测试,但我认为它应该可以工作。

记得导入 DB Facade:use Illuminate\Support\Facades\DB;


推荐阅读