2015-07-13 5 views
2

У меня есть следующие таблицы: различные типов контента: Content1, Content2 сводной таблицы: content_module различных типов модулей: module1, module2Laravel 5 полиморфных отношений с поворотным столом

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

Например: Content1 может иметь Module1, Module1, module2, Module1, module2, module2

Можно ли рекомендовать лучший подход в решении этой проблемы. Должен ли я использовать полиморфные отношения или необработанный запрос?

Если я могу использовать полиморфные отношения, есть ли пример, на который я могу посмотреть?

+0

описать пример использования в более реальном мире. –

+0

содержание: новости, блоги. модули: изображение, видео, копия новости или блоги могут иметь несколько изображений, видео и копировать в любом порядке. Пример: новостная статья будет иметь изображение, копию, копию, изображение, видео – user4451112

ответ

1

В итоге я создал свою собственную функцию getModules() в репозитории модели контента.

public function getModules() { 
    $contentableType = get_class($this->model); // this includes model's namespace like mynamespace\Content 
    $contentModules = DB::table('content_modules') 
        ->select(['moduleable_id', 'moduleable_type']) 
        ->where('status', 1) 
        ->where('contentable_id', $this->model->id) 
        ->where('contentable_type', $contentableType) 
        ->orderBy('position', 'asc') 
        ->get(); 
    $modules = []; 
    foreach ($contentModules as $cm) { 
     $model = App::make('mynamespace\\' . $cm->moduleable_type); 
     $record = $model->find($cm->moduleable_id); 
     $modules[] = [ 
      'type' => strtolower($cm->moduleable_type), 
      'data' => $record, 
     ]; 
    } 
    return $modules; 
} 

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

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