laravel - 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(...);
}
);
如果确实不支持,有没有办法解决它?
解决方案
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"
});
}
);