2015-04-21 6 views
0

Я разрабатываю таблицу базы данных, называемую answers. Поля будут source_type и source_id и т. Д. source_type - это «вопрос» или «комментарий», которые являются таблицами. Теперь проблема в том, что я хочу source_id в таблице answers для ссылки id в questions или id в comments в зависимости от значения поля source_type.Laravel Ссылки на любой стол

Таким образом, в нормальной ситуации это будет либо это:

$table->foreign('source_id')->references('id')->on('questions'); 

или это

$table->foreign('source_id')->references('id')->on('comments'); 

Однако, как я могу не уверен, как добавить ограничение в любой таблице?

+0

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

+0

@MrShibby Благодарим вас за то, что было бы хорошим дизайном базы данных для этой конкретной ситуации? –

+1

Обратите внимание, что для larvel и eloquent не нужен внешний ключ для создания отношений между вашей моделью. Но если вы хотите сохранить хороший дизайн базы данных, я нашел два интересных ответа: http://stackoverflow.com/questions/441001/possible-to-do-a-mysql-foreign-key-to-one-of-two -возможные таблицы и http://stackoverflow.com/questions/922184/why-can-you-not-have-a-foreign-key-in-a-polymorphic-association – Needpoule

ответ

1

Одним из вариантов в этой ситуации является определение двух полей question_id и comment_id. Оба эти параметра являются нулевыми внешними ключами для соответствующей таблицы.

Если один из них установлен, то вы знаете, какой тип он есть.

Вы также не можете определить внешний ключ для source_id, но тогда существует более высокий риск повреждения данных, и вы не можете определить для него правильные отношения.

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