Laravel 8 查询不存在的关联
访问模型的记录时,您可能希望根据不存在的关系来筛选结果。例如,假设您要检索所有 没有 评论的博客文章。为此,您可以将关系的名称传递给 doesntHave
和 orDoesntHave
方法:
$posts = App\Models\Post::doesntHave('comments')->get();
如果需要更多功能,可以使用 whereDoesntHave
和 orWhereDoesntHave
方法将「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();