php - 如何查询提供类型和 id 的多态 Eloquent 模型?
问题描述
我有一个多态模型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)
的是,它不适用于变形贴图。
我目前的解决方案是使用这个 kludge:
function getMorphType($typeOrClass)
{
$morphMap = array_flip(\Illuminate\Database\Eloquent\Relations\Relation::morphMap());
return array_get($morphMap, $typeOrClass, $typeOrClass);
}
解决方案
更好的方法可能是在模型中定义关系:https ://laravel.com/docs/5.8/eloquent-relationships#polymorphic-relationships
例如,我得到了 Project 和 Issue,这是可以讨论的两个模型。
class Project
{
public function discussions()
{
return $this->morphMany(Discussion::class, 'discussable');
}
}
class Issue
{
public function discussions()
{
return $this->morphMany(Discussion::class, 'discussable');
}
}
然后,如果您想获得有关项目或问题的所有讨论:
$project = Project::findOrFail(101);
$issue = Issue::findOrFail(102);
$project->discussions;
$issue->discussions;
推荐阅读
- kotlin - 如何在暴露的 kotlin 中选择别名列
- c - 为什么我的代码即使正确也不起作用?
- java - 普通类偶尔返回空值
- android - 不返回来电号码
- acumatica - 如何在客户端获取字段或变量的信息
- python - 名称 'latest_change_date' 未定义,如何按日期时间排序
- python - 运行数据框与部分并行应用
- eventhandler - 父页面订阅嵌套子控件事件处理程序的问题
- django - 关于 Django 的问题。我的客户只想通过单击或其他方式添加其他选择。我可以解决这个问题吗?
- docker - Kubernetes 重复 pod kube-system/metrics-server 收到错误