我有以下表格: 不同的内容类型:content1,content2 数据透视表:content_module 不同的模块类型:module1,module2
我正在尝试在内容*表和模块*表之间建立关系,以便每个内容可以按任何顺序混合任何模块。
例如: content1可以有module1,module1,module2,module1,module2,module2
任何人都可以推荐解决此问题的最佳方法。我应该使用多态关系还是原始查询?
如果我可以使用多态关系,我可以看一个例子吗?
答案 0 :(得分:2)
我最终在内容模型的存储库中编写了自己的函数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中选择记录,然后为每个记录,一个单独的查询从相应的表中检索模块。这假设每个模块都有自己的表,每个表都有不同的列。