Динамические таблицы и модели в Laravel 5

У меня есть следующие таблицы:

pages
    id
    title
    ...

dynamic_table_1_infos
    id
    page_id
    image_id
    dynamic_field_1
    dynamic_field_2
    ...

dynamic_table_2_infos
...

Таким образом, существуют отношения «один ко многим».

Есть ли способ использовать общий подход без создания модели DynamicTable[No]Info «на лету» для каждой таблицы?

А что, если мне понадобятся какие-то дополнительные методы в этих моделях?

Модель «Страница» будет иметь много отношений с таблицами «dynamic_table_[no]_infos». Поэтому мне, вероятно, понадобится общий метод для этого. (Имеет много информации dynamic_table

pages
    id
    title
    ...

dynamic_table_1_infos
    id
    page_id
    image_id
    dynamic_field_1
    dynamic_field_2
    ...

dynamic_table_2_infos
...
info/имеет много информации dynamic_table_2_info...)

То, что я пытаюсь сделать, каким-то образом вдохновлено типами контента Dupal.


person Dorin Niscu    schedule 22.08.2015    source источник
comment
Что я делаю, когда не уверен в структуре данных, так это сохраняю все это как JSON. Это может решить вашу проблему. Это здорово в Laravel или PHP, потому что вы можете затем анализировать JSON обратно как объекты. Однако я почти уверен, что это плохая практика. В любом случае, вы можете создать общую таблицу dynamic_info, а затем иметь только столбцы, id, page_id и, наконец, столбец data, в котором вы можете хранить свои динамические данные в формате JSON.   -  person noahdotgansallo    schedule 22.08.2015


Ответы (1)


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

Я не уверен, как вы хотите решить, в какую таблицу Eloquent должен сохраняться - например, если у вас есть атрибут с именем segment в вашем режиме, вы можете просто сделать:

public function getTable() {
  return 'dynamic_table_' . $this->segment . '_infos';
}
person jedrzej.kurylo    schedule 23.08.2015
comment
Динамическая модель может иметь, например, image_id (также динамически добавленный). Модель будет создаваться на лету, и мне нужно будет добавлять в нее отношения на лету, чтобы не редактировать ее вручную. (идентификатор изображения принадлежит модели изображения). - person Dorin Niscu; 23.08.2015
comment
Я понятия не имею, что вам нужно. Не могли бы вы опубликовать еще несколько примеров? И скажи мне, ЗАЧЕМ тебе такое нестандартное поведение? - person jedrzej.kurylo; 23.08.2015
comment
То, что я хочу создать, каким-то образом вдохновлено типами содержимого Drupal. В моем случае у каждого типа контента есть настраиваемая таблица (статья с x полями / продукт с y полями и т. д.). Вручную легко, но я хотел бы иметь для этого интерфейс администратора. Поэтому, когда я добавляю тип контента, я могу создавать dynamic_table_1_infos, 2, 3 и т. д. Я могу создавать даже модели с помощью команды Artisan, но я не знаю, как делать отношения. Например, динамическая таблица может иметь ссылку на изображение из таблицы изображений. - person Dorin Niscu; 23.08.2015