Объединение 4 таблиц Laravel MySQL

88
28 ноября 2019, 19:00

Я начал изучать фреймворк Laravel 5.8 и столкнулся с проблемой. Проблема относится скорее к проектировке базы данных. Но решение нужно для Laravel(желательно Eloquent ORM).

Задача такова: Есть интернет-магазин цветов. На сайте есть категория "Букеты". Букеты имеют определенный размер(S, M, L...). Размер состоит из количества цветов в букете, высоты букета, диаметра. При чем каждый размер может иметь одно название но разное количество цветов, высоту и диаметр.

Например:

  • размер-"S": количество 21, высота 50см, ширина 40см.

  • размер-"S": количество 15, высота 50см, ширина 30см.

Каждый размер может принадлежать разным букетам(Связь многие ко многим).

Администратор может выбрать существующий размер для нового букета или создать новый размер.Он задает название, количество, высоту и диаметр. При этом один букет может иметь несколько размеров("S", "M"...).

У букетов также есть фото, которые должны меняться после выбора размера. Также есть цена, которая тоже меняется при изменении размера.

Теперь таблицы и связи:

bouquets_table

id
name

sizes_table

id
name //"S", "M"...
count
height

prices

id
price

photos

id
photo

Я создал связь многие ко многим между этими таблицами bouquet_size

bouquet_id
size_id

В моделях Bouquet и Size прописал belongsToMany().

А теперь собственно главный вопросы: Можно ли в промежуточную таблицу bouquet_size добавить поля price_id и photo_id и доставать всё это через Pivot(Думаю это неправильно).

Как связать все 4 таблицы что бы при выборе размера букета подбиралась фотография и цена для этого букета. Прописывать каждому букету свою цену и фото считаю неправильно, так как я хочу что бы у одного букета были разные размеры и разные фото и цена в зависимости от размера.

Если можно в ответе подскажите как реализовать всё это в моделях(код).

Спасибо большое!

Answer 1

Исходя из твоих требований лучше немного изменить структуру базы. Главная таблица также - букеты. Каждый букет имеет больше одной модификации. Каждая модификация привязана только к одному букету. У каждой модификации есть цена, размер и фото. Цену не надо пихать в отдельную таблицу. Для фото если просто делать - достаточно поля в таблице модификаций. Если нужны размеры изображений - тогда уже их в отдельную таблицу. Вот с размерами надо определиться:

если букеты имеют разные цветы, то логично иметь таблицу цветов. Например букет "Х" состоит из 3х роз, 2х ромашек и 5 лилий. Тогда связь модификация-цветок многие-ко-многим с количеством в pivot таблице.

Если достаточно просто размера - тогда как ты описал, будет иметь место таблица размеров как у тебя, но связь модификация-размер многие-ко-многим (у модификации поле size_id)

READ ALSO
Защита серверной части php

Защита серверной части php

У меня есть серверная часть написанная на php, мне нужно её максимально защитить от XSS и подобных атак

124
Скрываем /?taxonomy=

Скрываем /?taxonomy=

Как скрыть в адресной строке таксономию?

153
В каком формате должна быть запись в wp_posts > post_name?

В каком формате должна быть запись в wp_posts > post_name?

Есть задача, добавлять новые записи напрямую в базу WordPressДля этого создал в отдельном файле подключение к базе и выполняю запрос на добавление...

121