Обратный к ownToMany - PullRequest
       1

Обратный к ownToMany

0 голосов
/ 27 мая 2020

У меня две модели:

  • Order
  • Invoice

Каждая Order может иметь много Invoice s - и Invoice может принадлежать многим Order s.

Итак, я могу найти Order и проверить: «Эй, какие Invoices были созданы для этого Order

В обратном направлении каждый Invoice может принадлежат к множественным Order s, потому что, возможно, клиент заказал два продукта в один и тот же день, и поэтому было бы здорово, если бы он получил только один Invoice, который включает оба заказа.

Вот как я это сделал:

Invoice

public function orders()
{
    return $this->belongsToMany(Order::class);
}

Order

public function invoices()
{
    return $this->belongsToMany(Invoice::class, 'invoice_order');
}

Это работает, но кажется неправильным сменить таблицу на промежуточную invoice_order здесь. Есть ли у вас какие-нибудь мысли по этому поводу? : -)

Заранее спасибо за мысли: -)

1 Ответ

1 голос
/ 27 мая 2020

Разделение отношения на отдельную сводную таблицу - это обычно используемый метод в laravel (и в большинстве других фреймворков) для отношений "многие ко многим". Его легко поддерживать, легко получить связанные модели, используя отношения многие ко многим, и если кому-то еще нужно поработать над этим в будущем, они, вероятно, использовали его и в прошлом, чтобы не обжечься. .

Другой метод, который вы можете использовать, - это создать столбец json в одной из таблиц (вы также можете создать столбец в обеих таблицах, если хотите, но это просто дополнительные накладные расходы). Затем вы можете сохранить идентификаторы связанных моделей в этом столбце json. Затем вы можете присоединиться к таблицам, используя команды json, связанные с вашей базой данных. Eloquent не поддерживает отношения на json, но вы можете использовать этот пакет staudenmeir / eloquent- json -relations для построения отношений на json полях.

В общем, я Я бы посоветовал сохранить сводную таблицу стандартным способом, но если это не подходит, вы можете попробовать метод столбца json

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