2014-11-04 2 views
0

Я создаю схему для веб-сайта, на котором будут отображаться изображения и тип объекта post, к которому может относиться изображение. Таким образом, моя база данных изображений может выглядеть так:Рекомендуемый подход к базе данных для галерей и изображений сайта

# 'Image' table 
---------------- 
id 
name 
url 
post_id 

Затем для каждого сообщения я могу захватить его изображение. Но:

  • два сообщения не могут делать изображение
  • , если добавить еще один тип объекта из page, я должен был бы гарантировать, что они никогда не имеют одинаковую id.

Поэтому я считаю, что хороший старт - это просто удалить поле post_id с изображениями, как больше проблем, чем своих достоинств. Какое наилучшее решение для этой проблемы manyToMany? На данный момент я имею в виду, имеющий в период между столом:

# 'Gallery' pivot table 
------------------------ 
id 
object_type [post or page] 
object_id 
image_id 

Теперь posts и pages может иметь несколько images. Я просто пробиваю это, чтобы захватить все связанные изображения для типа объекта. Это правильно? Если это имеет значение, я использую рамки Laravel. Я создаю довольно большое приложение и сознаю, что, если я ошибаюсь на ранней стадии, это может действительно укусить меня позже.

+0

Я работал бы с полиморфными отношениями, чтобы у вас была таблица с обоими сообщениями и страницами. то достаточно простого внешнего ключа на изображении. Я не знаю, как выглядит ваша страница и модель сообщений. Являются ли они похожими в некоторых частях? или совсем другое? – lukasgeiter

ответ

1

Вы по-прежнему ответили на ваш вопрос :-) Я бывал с множеством и многими отношениями, поэтому нужна сводная таблица.

Существует соглашение о том, что имя сводной таблицы названо после того, как их модели соединяются (в алфавитном порядке). Так, например, в вашем случае, если ваш поворотный стол будет выглядеть так:

table: image_post 
------------------------ 
id | image_id | post_id 

чеке documentatin для получения дополнительной информации: many-to-many

жадная загрузка также интересная часть следующего содержания: eager loading

например запрос на конкретный пост и все его изображения:

$post = Post::with('images')->find($id); 
Смежные вопросы