2016-02-22 6 views
0

У меня есть следующие таблицы:Laravel 5,1 - Полиморфные отношения для нескольких столбцов

изображения (идентификатор, имя файл ...)

страница (название, пробковые ...)

пользователи (имя пользователя, адрес электронной почты ...)

Я создал imageables стол, чтобы сохранить изображение отношения

image_id/imageable_id/Тип (Страницы/Пользователи и т.д.)

Он отлично работает, если мне нужно только одно изображение (ы) поле на модель.

Но как я должен действовать, если мне нужно, например header_image и paragraph_image в одной странице?

Если я хочу один header_image/paragraph_image я могу держать поле непосредственно в модели (header_image_id, paragraph_image_id), но что, если у меня есть верхний ползунок и галерея для статьи .. мне нужно будет 2 многие из многих отношений.

Можно ли сохранить все из них в одном изображений для изображений стол? Теоретически мне понадобится еще одна колонка для однозначности (например, имя поля).

ответ

0

Я думаю, что вы не создаете свои таблицы и отношения должным образом. В вашем случае я бы создал две разные таблицы: страницы и изображения с отношением сводной таблицы.

  1. Страница таблица: идентификатор, название, пуля ...
  2. Изображение стола: идентификатор, тип , имя файл ...
  3. Сводная таблица (Изображения и страница): page_id, image_id.

Затем вы можете просто использовать столбец типа таблицы «Изображения», чтобы указать место, где вы хотите поместить это изображение. Вы можете установить тип равен заголовок или абзац или слайдер ...

$image = new Image; 
$image->type= 'header'; 
$image->filename = 'yourimage.jpg'; 
... 
$image->save(); 

На вашем взгляде вы можете получить изображение, которое вы хотите для вашего заголовка, абзаца, слайдер, как это:

$page->images()->where('type', 'header')->first(); 

Надеется, что это помогает!

+0

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

+0

В этом случае вы были правы с вашим заключением. Просто создайте таблицу Полиморфного отношения, называемую Изображения со следующими столбцами: id, filename, type (header, slider, paragraph ...), imageable_id (это будет содержать идентификатор страницы или любой другой модели), imageable_type (это будет содержать Название модели).Если вы хотите знать, как создать модель, проверьте это: https://laravel.com/docs/5.1/eloquent-relationships#polymorphic-relations –

+0

Я бы предпочел многополиморфную таблицу многоголоса с image_id/imageable_id - item id/imageable_type - Model name/+ имя поля, если у меня есть несколько полей в одной модели (слайдер, изображения статей). Я не знаю, возможно ли это. –

Смежные вопросы