OP:Laravel «Трехсторонний» опорный стол?
У меня есть страница под названием «Бакалея» на моем сайте. Для этого я использую две таблицы:
Categories [$this->hasMany('App\Product')]
- id
- name
Products [$this->belongsTo('App\Category')]
- id
- category_id
- name
Простой материал. В моем запросе я собираю все категории с соответствующими продуктами. groceries = Category::with('products')->get();
Тогда, на мой взгляд, я могу получить доступ ко всем категориям с их продуктами и перечислить их красиво, все категории будут отображаться один раз, а под названием категории будут мои продукты. Все хорошо. Пример:
Category Alcohol
- Beer
- Wine
- Whisky
Category Bread
- Brown Bread
- White Bread
.. и так далее.
И вот тогда это становится сложным, по крайней мере для меня. До сих пор я использовал вышеупомянутый метод для одного простого списка продуктов. Но теперь я хочу добавить еще одну таблицу под названием «Продовольственные товары», в которой я храню списки продуктов. Как так:
Groceries
- id
- name
С этим, я думаю, что сводная таблица пригодится, но я не уверен, о том, что хранить в сводной таблице и как получить доступ ко всем данным:
category_product?
grocery_product?
- id
- grocery_id
- product_id?
- category_id? I don't think I need to store this in the pivot table, it can be accessed through the Products model?
- number
Я с трудом постигать «простую» сводную таблицу, и теперь это становится еще более сложным, с «трехходовой» сводной таблицей.
Я хотел бы хранить следующие в моей сводной таблице:
Продуктовая идентификатор списка покупок. Но потом я застрял. Что еще я должен хранить в сводной таблице, для того, чтобы меня, чтобы иметь возможность по-прежнему продолжать использовать вышеупомянутый метод, но с дополнительным параметром, например, так:
$groceries = Grocery::find($id)->with('categories')->with('products'); ?
Что лично я имею в виду, что Я should
использовать следующее соотношение в моей модели Бакалея ?:
public function categories()
{
return $this->hasMany('App\Category')->with('App\Product');
}
Любые указатели в правильном направлении, чтобы помочь указать свой ум в правильном направлении будет уже помочь тонн.
Edit:
Модель пользователя:
public function groceries()
{
return $this->hasMany('App\Grocery');
}
Модель Категория:
public function products()
{
return $this->hasMany('App\Product');
}
Model Продукты:
public function category()
{
return $this->belongsTo('App\Category');
}
Модель Бакалея:
// No relations yet
Редактировать # 2: На моей странице groceries.index У меня есть простой список списков покупок для текущего зарегистрированного пользователя. Они могут создавать, редактировать или удалять списки продуктов.
После того, как пользователь нажимает на «Создать Бакалея список», я показываю вид со всеми категориями и их соответствующих продуктов, например:
Category Alcohol
- [ ] Beer
- [ ] Wine
- [ ] Whisky
Category Bread
- [ ] Brown Bread
- [ ] White Bread
[] обозначает флажком. Пользователь может выбрать, какие продукты он или она хочет добавить в список. При сохранении я хочу сохранить идентификатор списка продуктов в сводной таблице с выбранными идентификаторами продукта.
Затем в форме редактирования я хочу показать тот же вид, но с сохраненными продуктами, которые уже выбраны. Поэтому я считаю, что лучший способ добиться этого - сохранить идентификатор бакалеи в сводной таблице, и это выбранные продукты. Затем, в форме редактирования, я просто проверяю, существует ли идентификатор продукта, и если это так, установите флажок. Но я застрял в том, как отношения должны быть похожими и что я на самом деле должен хранить в сводной таблице, идентификатор продукта, как я уже сказал, или я даже не должен использовать сводную таблицу вообще?
Что такое список Бакалея в вашем случае? 'User ID 1: одно вино, два пива, один сыр' - что-то вроде этого или нет? –
объясняют отношение Продукта с категориями и/или продуктами. – Junaid
Просьба указать отношения между категорией, бакалейными товарами и продуктом. –