【发布时间】:2019-10-20 01:44:01
【问题描述】:
我有一个多态模型Discussion 和其他模型discussable。
我已将我的变形图配置为将project 转换为App\Models\Company\Project,即discussable。
我想写:
function get_all_discussions($type, $id)
{
return Discussion::orderBy('created_at', 'desc')
->where('discussable_type', $type)
->where('discussable_id', $id)
->get();
}
get_all_discussion('project', 1232);
很遗憾,->where('discussable_type', $type) 不适用于变形贴图。
我目前的解决方案是使用这个组合:
function getMorphType($typeOrClass)
{
$morphMap = array_flip(\Illuminate\Database\Eloquent\Relations\Relation::morphMap());
return array_get($morphMap, $typeOrClass, $typeOrClass);
}
【问题讨论】:
-
您是在已有
Discussion实例之前还是之后添加了morphMap?检查您的数据库并查看是否填写了完整的类名或仅填写了'project'。如果填写了完整的类名,则可能通过将完整的类名替换为简写名称来修复。 -
@Teun
morphMap在我的AppServiceProvider@boot中创建 -
“不适用于变形贴图”是什么意思?
discussable_type列已经包含“projects”而不是“App\Models\Company\Project”,对吧?
标签: php laravel eloquent relationship polymorphic-associations