codecamp

Laravel 8 查询已存在的关联

在查询时,可能需要将关联记录是否存在作为条件。例如,查出至少有一条评论的文章。可以通过向 hasorHas 方法传递关联名称实现:

// 查出至少有一条评论的文章...
$posts = App\Models\Post::has('comments')->get(); 

也可以指定运算符和数量来进一步自定义查询:

// 查出至少有三条评论的文章...
$posts = App\Models\Post::has('comments', '>=', 3)->get(); 

也可以用「点」语法构造嵌套的 has 语句。例如,查出至少有一条评论和投票的文章:

// 查出至少有一条带投票评论的文章...
$posts = App\Models\Post::has('comments.votes')->get(); 

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

use Illuminate\Database\Eloquent\Builder;

// 获取至少带有一条评论内容包含 foo% 关键词的文章...
$posts = App\Models\Post::whereHas('comments', function (Builder $query) {
    $query->where('content', 'like', 'foo%');
})->get();

// 获取至少带有十条评论内容包含 foo% 关键词的文章...
$posts = App\Models\Post::whereHas('comments', function (Builder $query) {
    $query->where('content', 'like', 'foo%');
}, '>=', 10)->get();
Laravel 8 在关联之后链式添加 orWhere 条件
Laravel 8 查询不存在的关联
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Laravel 8 入门指南

Laravel 8 基础功能

Laravel 8 前端开发

Laravel 8 安全相关

Laravel 8 综合话题

数据库

Eloquent ORM

测试相关

官方拓展包

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }