useIlluminate\Database\Eloquent\Builder;
// 查询与帖子或视频相关并且标题以 foo 开头的评论...$comments = App\Comment::whereHasMorph(
'commentable',
['App\Post', 'App\Video'],
function (Builder $query) {
$query->where('title', 'like', 'foo%');
}
)->get();
// 查询与帖子相关的评论,标题不是以 foo 开头的...$comments = App\Comment::whereDoesntHaveMorph(
'commentable',
'App\Article',
function (Builder $query) {
$query->where('title', 'like', 'foo%');
}
)->get();
/**
SELECT *
FROM `comments`
WHERE `commentable_type` = 'App\Article'
AND NOT EXISTS (
SELECT *
FROM `articles`
WHERE `comments`.`commentable_id` = `articles`.`id`
AND `body` LIKE 'foo%'
)
*/// $type 参数根据相关模型添加不同的约束:$comments = App\Comment::whereHasMorph(
'commentable',
['App\Post', 'App\Video'],
function (Builder $query, $type) {
$query->where('title', 'like', 'foo%');
if ($type === 'App\Post') {
$query->orWhere('content', 'like', 'foo%');
}
}
)->get();
// 所有多态类型$comments = App\Comment::whereHasMorph('commentable', '*', function (Builder $query) {
$query->where('title', 'like', 'foo%');
})->get();
模型计数
$posts = App\Post::withCount('comments')->get();
//select`posts`.*, (select count(*) from `comments` where `posts`.`id` = `comments`.`post_id`) as `comments_count` from `posts`foreach ($posts as $post) {
echo $post->comments_count;
}
$post = App\Post::first();
$post->loadCount('comments');
//select`id`, (select count(*) from `comments` where `posts`.`id` = `comments`.`post_id`) as `comments_count` from `posts` where `posts`.`id` in (1)
$post->loadCount(['comments' => function ($query) {
$query->where('rating', 5);
}])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?