Отношения отношений - PullRequest
       54

Отношения отношений

0 голосов
/ 26 октября 2019

У меня проблема с пониманием моделей и отношений Laravel Eloquent.

У меня есть таблица пользователей user. Эти пользователи могут добавлять автомобильные номерные знаки, которые я сохраняю в user_plates. У меня есть база данных, которая содержит модели и типы автомобилей. Имя таблицы cars. У меня есть модели App \ User, App \ UserPlates и App \ Car.

В таблице user_plates есть поля id,plate,user_id,car_id. Я сохраняю табличку, ассоциированного пользователя (в user_id) и выбранный автомобиль (car_id (id из таблицы cars))

Я добавил plates() с функцией belongTo в мою модель пользователя, которая уже успешно возвращает всетаблички, связанные с этим пользователем. Но теперь я хочу получить связанный автомобиль (car_id внутри user_plates). Как мне добиться этого с помощью Eloquent? Таблица car не имеет никакого отношения к таблице user, только user_plates имеют car_id и user_id.

Мне нужно добиться этого: User -> Plates (can be multiple) -> Plate -> Car. Я знаю, как добиться этого с помощью простых соединений MySQL, но я хочу сделать это правильно с Eloquent. Спасибо за любую помощь!

Laravel: 6.4.0

1 Ответ

1 голос
/ 26 октября 2019

Итак, если ваша база данных настроена как ...

users   user_plates   cars
-----   -----------   ----
id      id            id
etc.    plate         etc.
        user_id
        car_id

Ваши модели настроены как ...

// in model: User
public function user_plates() 
return $this->hasMany('UserPlate');  // fill out fully qualified name as appropriate…

// in model: UserPlate
public function user() 
return $this->belongsTo('User');

public function car()
return $this->belongsTo('Car');

// in model: Car
public function user_plates()
return $this->hasMany('UserPlate’);

Чтобы вернуть коллекцию автомобилей, принадлежащихпользователь $id вы должны иметь возможность запустить:

$cars = User::findOrFail($id)-> user_plates->pluck('car');
...