Отношение ко многим Laravel Eloquent с несколькими промежуточными таблицами - PullRequest
0 голосов
/ 25 апреля 2018

Я использую Laravel 5.4 и имею следующую модель и структуру таблицы:

users
-----
id

accounts
--------
id

holdings
--------
id
account_id (foreign key to account)

user_accounts
-------------
id
user_id
account_id
  • У пользователя может быть несколько учетных записей
  • Учетная запись может использоваться несколькими пользователями.пользователи
  • Каждая учетная запись имеет несколько владений
  • Таким образом, у пользователя косвенно имеется много владений через их многочисленные учетные записи.

Мне нужна помощь, чтобы определить отношение кпользовательская модель под названием «владения», позволяющая получить все авуары, применимые к пользователю (на основе учетных записей, с которыми они связаны).

Я пробовал много разных вещей и провел годы в Google,Я могу приблизиться как к принадлежащим параметру ownToMany, так и к hasManyThrough, но кажется, что они работают только для трех табличных отношений, где промежуточная таблица хранит первичные ключи из других таблиц.Я могу уменьшить свои отношения до 3 таблиц (а не 4), если я использую внешний ключ account_id в таблице владений, чтобы устранить необходимость присоединения через таблицу счетов, однако я не могу заставить это работать.

принадлежит ToMany - holdings. id должно быть holdings. account_id:

select * from `holdings`
inner join `user_accounts` on `holdings`.`id` = `user_accounts`.`account_id`
where `user_accounts`.`user_id` = ?

hasManyThrough - user_accounts. id должно быть user_accounts. account_id:

select * from `holdings`
inner join `user_accounts` on `user_accounts`.`id` = `holdings`.`account_id`
where `user_accounts`.`user_id` = ?"

1 Ответ

0 голосов
/ 27 апреля 2018

Ну, это не совсем ответ, поскольку я спрашивал о laravel 5.4, но это возможное решение.

Оказывается, мне повезло, когда я натолкнулся на это Laravel отношусь к ToMany, определяющему локальный ключ для обеих таблиц , который указывает, что отношение в принадлежность к ToMany было улучшено в Laravel 5.5 для поддержки этого типа сценария.

Я обновил свой проект до L5.5 и заменил свой хак следующим соотношением:

return $this->belongsToMany(Holding::class, 'user_accounts', 'user_id', 'account_id', null, 'account_id');

И я рад сообщить, что он, кажется, работает отлично - по крайней мере, для базовых пакетов, который является моим вариантом использования, я не пробовал обновлений и т. Д.

Спасибо @cyberfly и тем, кто разместил ответ выше

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