Как я могу определить обратное полиморфное отношение многие-к-майу в eloquent? - PullRequest
0 голосов
/ 24 мая 2019

Я новичок в Laravel здесь.Некоторая путаница в отношении красноречивых отношений.

Я пытаюсь добиться этого: Отношения

Вот диаграмма ER

  • 1 Вопрос может быть любого типа (множественный выбор / упорядочение / сопоставление / и т. Д.)
  • 1 выборка AKA 1 строка в каждой таблице {type} может быть сопоставлена ​​только с 1 вопросом

В ER-диаграмме подсвеченная красным цветом часть была моей первой мыслью (Полиморфная 1-ко-многим), но теперь я изменил ее на многозначную с помощью сводной таблицы:

[сводная таблица]

question_id | choiceable_id | choiceable_type

Однако возникает вопрос: Как определить этот тип отношений в моделях?

  • Полиморфный тип «многие ко многим» правильного типа?
  • Как правильно выбрать вариант ответа на случайный вопрос?

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

// Question Model
function get_multiple_choices {
return $this->morphedByMany('App\TypeMultipleChoice', 'choiceable')

function get_ordering_choices {
return $this->morphedByMany('App\TypeOrderingChoice', 'choiceable')

...

это правильный код?И я до сих пор не знаю о выборе для случайной части вопроса.Почему-то я чувствую, что должен быть более простой способ сделать такой выбор.

РЕДАКТИРОВАТЬ

Хорошо, позвольте мне перефразировать его.

МожетЯ использую / Как использовать:

// Question Model
function choices {
   // $this->MorphTo,MorphedByMany, etc. ?
}

вместо

// Question Model
function get_multiple_choices {}
function get_matching_choices {}
function get_ordering_choices {}
... x 4-5 more times

1 Ответ

0 голосов
/ 24 мая 2019

Используйте 'hasMany' для получения отношений "многие ко многим"

public function multipleChoices
{
    Return $this->hasMany('App\TypeMultipleChoice', 'choiceable');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...