如何查询提供类型和ID的多态雄辩模型?

时间:2019-06-04 13:52:34

标签: php laravel eloquent relationship polymorphic-associations

我有一个多态模型Discussion和其他模型discussable

我已将我的变形贴图配置为将project转换为App\Models\Company\Project的{​​{1}}。

我想写:

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)

1 个答案:

答案 0 :(得分:-1)

更好的方法可能是在模型中定义关系: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;