Красноречивые вложенные сложные отношения - PullRequest
1 голос
/ 15 апреля 2020

У меня проблемы с цепочкой отношений. Я хочу объединить три из них, но это не работает должным образом:

    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

Каким может быть способ получения атрибутов для кусков автомобилей пользователя?

Спасибо за помощь!

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете передать функцию вашим нетерпеливым атрибутам загрузки:

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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...