阅读(959) (8)

Laravel 8 查询不存在的关联

2021-07-08 09:44:45 更新

访问模型的记录时,您可能希望根据不存在的关系来筛选结果。例如,假设您要检索所有 没有 评论的博客文章。为此,您可以将关系的名称传递给 doesntHaveorDoesntHave 方法:

$posts = App\Models\Post::doesntHave('comments')->get(); 

如果需要更多功能,可以使用 whereDoesntHaveorWhereDoesntHave 方法将「where」 条件加到 doesntHave 查询上。这些方法允许你向关联加入自定义限制,比如检测评论内容:

use Illuminate\Database\Eloquent\Builder;

$posts = App\Models\Post::whereDoesntHave('comments', function (Builder $query) {
    $query->where('content', 'like', 'foo%');
})->get(); 

还可以使用「点」语法执行嵌套关联查询。例如,下面的查询用于获取带有没被禁用的作者发表评论的文章:

use Illuminate\Database\Eloquent\Builder;

$posts = App\Models\Post::whereDoesntHave('comments.author', function (Builder $query) {
    $query->where('banned', 0);
})->get();