首页 > 解决方案 > Laravel 5.8 whereHasMorph“点”语法不支持?

问题描述

Laravel 5.8 引入whereHasMorph用于查询多态关系。https://laravel.com/docs/5.8/eloquent-relationships#querying-relations

我可能遗漏了一些东西,但它似乎不支持点语法。

在正常的关系中,我可以做类似的事情:

$comments->whereHasMorph(
'video.someRelationship', function ($query) {
    $query->where(...);
});

但是 whereHasMorph 似乎不起作用:

$comments->whereHasMorph(
    'commentable.someRelationship',
    [Video::class, Audio::class],
    function ($query) {
        $query->where(...);
    }
);

如果确实不支持,有没有办法解决它?

标签: laraveleloquentlaravel-5.8

解决方案


whereHasMorph()不(也不能)支持“点语法”。

在闭包内使用whereHas()嵌套关系:

$comments->whereHasMorph(
    'commentable',
    [Video::class, Audio::class],
    function ($query) {
        $query->where(...) // Constraint on "commentable"
            ->whereHas('someRelationship', function ($query) {
                $query->where(...); // Constraint on "someRelationship"
            });
    }
);

推荐阅读