2017-02-17 22 views
2

У меня есть модель Laravel под названием «Площадь», которая содержит «Элементы». Элементы могут быть разными (в данном случае FreetextElement и CheckboxElement). Все это связано с полиморфной сводной таблицей, , которая содержит area_id, element_id и element_type. Основные отношения работают отлично. Если я, например, сказать:Laravel Полиморфные отношения, получающие разные модели

$area->freetextElements 

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

Вот площади отношений:

public function freetextElements() 
{ 
    return $this->morphedByMany(ElementFreetext::class, 'element', 'coaching_element_area_element'); 
} 

public function checkboxElements() 
{ 
    return $this->morphedByMany(ElementCheckbox::class, 'element', 'coaching_element_area_element'); 
} 

//find a better solution for this 
public function elements() 
{   
    return array_merge($this->freetextElements->all(), $this->checkboxElements->all()); 
} 

«элементы» последняя функция является лишь иллюстрацией того, что я пытаюсь добиться.

Любые предложения? Заранее спасибо.

С наилучшими пожеланиями

ответ

0

Так что я нашел решение этой проблемы. Это не самое чистое решение. Итак, я все еще открыт для любых дополнительных отзывов, но я думал, что оставил это здесь для других людей.

Я просто создал модель для записей сводной таблицы. Area-> Elements - это отношение к элементам сводной таблицы и эта модель сводной таблицы связана с отдельными элементами посредством собственного отношения. Теперь я могу связать связь, сказав: Area-> Elements-> Element. Это не оптимально, но он выполняет свою работу.