Мне нужно использовать идентификатор сводной таблицы в качестве внешнего ключа в другой таблице.
например, у меня есть следующие таблицы:
users: id, username, ... places: id, placename, lat, lng, ... place_user: id, user_id, place_id routes: place_user_id, lat, lng, inserted_at.
поэтому, когда пользователь говорит, что я собираюсь в это место, у меня есть новая запись в таблице place_user и начинаю регистрировать маршрут, который он занимает, чтобы добраться туда. Поэтому для каждой записи place_user у меня есть много записей в таблице маршрутов.
Каков правильный способ делать подобные отношения с помощью красноречия? Должен ли я создать модель для сводной таблицы?
Я попытался решить свою проблему по следующему решению, но не повезло: https://github.com/laravel/framework/issues/2093#issuecomment-39154456 и разместил там комментарий https://github.com/laravel/framework / вопросы / 2093 # issuecomment-58187802
любые предложения будут оценены.
После многих поисков и тестирования различных решений я придумал следующее решение:
Модель пользователя:
class User extends \Eloquent { public function places() { return $this->hasMany('PlaceUser')->with('Place'); } }
Место Модель:
class Place extends \Eloquent { public function users() { return $this->hasMany('PlaceUser')->with('User'); } }
Модель PlaceUser:
class PlaceUser extends \Eloquent { public function user() { return $this->belongsTo('User'); } public function place() { return $this->belongsTo('Place'); } public function footprints() { return $this->hasMany('Footprint'); } }
У меня есть измененный маршрут имени для отслеживания, чтобы избежать проблем с классом маршрута, включенным в laravel.
Модель следа:
class Footprint extends \Eloquent { public function place_user() { return $this->belongsTo('PlaceUser'); } }
В конце я получаю структуру, где я могу делать разные запросы, например:
// gets all places with corresponding pivot table entries and users table entries Place::with('users')->get(); // get user with id=1 including corresponding pivot table entries and places table entries User::with('places')->find(1); // get footprint of the user $user->places->get(0)->footprints
надеюсь это поможет