You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel新手求教:如何在Eloquent模型中结合join与where查询多表

嘿,刚接触Laravel碰到关联问题太正常啦!我先帮你把已有的两张表关联理清楚,再给你说说带条件关联多张表的通用思路——毕竟你提到的表3结构不全,我就拿最常见的场景举例啦~

第一步:先搞定基础的两张表关联

首先咱们得在模型里定义好users和articles的关联关系(明显是一对多:一个用户可以写多篇文章):

在User模型里添加关联方法:

// app/Models/User.php
public function articles()
{
    return $this->hasMany(Article::class);
}

在Article模型里添加反向关联:

// app/Models/Article.php
public function user()
{
    return $this->belongsTo(User::class);
}
带条件的多表关联查询场景

假设表3是comments(评论表,常见的关联场景),结构大概是id, content, article_id, user_id, timestamps(),咱们来看看几种常见的带条件关联需求:

1. 过滤主模型:只保留满足关联条件的记录(用whereHas)

比如你想查询所有发布过标题含“Laravel”关键词文章的用户,或者想找那些文章有特定评论的用户,就用whereHas:

// 示例1:找所有有标题带"Laravel"文章的用户
$users = User::whereHas('articles', function ($query) {
    $query->where('title', 'like', '%Laravel%');
})->get();

// 示例2:找所有文章里有含"干货"评论的用户
$users = User::whereHas('articles.comments', function ($query) {
    $query->where('content', 'like', '%干货%');
})->get();

⚠️ 注意:用嵌套关联(articles.comments)时,得先在Article模型里定义好和Comment的关联:

// app/Models/Article.php
public function comments()
{
    return $this->hasMany(Comment::class);
}

2. 加载带条件的关联数据(用with+闭包)

如果你不想过滤用户本身,只是想加载用户数据时,只附带满足特定条件的关联文章(比如只加载用户最近7天发布的文章),就这么写:

$users = User::with(['articles' => function ($query) {
    $query->where('created_at', '>=', now()->subDays(7));
}])->get();

这种方式会返回所有用户,但每个用户的articles属性里只有符合条件的文章。

3. 复杂场景用原生联表查询(join)

如果你的条件涉及多表字段的复杂判断,也可以用原生的join语法:

$users = User::join('articles', 'users.id', '=', 'articles.user_id')
    ->where('articles.title', 'like', '%Laravel%')
    ->select('users.*', 'articles.title as article_title') // 可选,指定要查询的字段
    ->get();
要是表3是其他类型?比如分类表

假设表3是categories(分类表),还有中间表article_category(文章分类关联表),那就是多对多关联,处理逻辑类似:
先在Article模型里定义多对多关联:

// app/Models/Article.php
public function categories()
{
    return $this->belongsToMany(Category::class);
}

然后查询所有发布过“教程”分类文章的用户:

$users = User::whereHas('articles.categories', function ($query) {
    $query->where('name', '教程');
})->get();

内容的提问来源于stack exchange,提问作者Colt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:43:19