php - 雄辩的嵌套复杂关系
问题描述
我在链接关系方面遇到了一些麻烦。我想链接其中三个,但这不能正常工作:
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
有什么方法可以检索用户汽车的属性?
感谢您的帮助!
解决方案
您可以将函数传递给您的急切加载属性:
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;