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

Laravel多对多关联模型如何添加条件子句过滤关联数据?

单次查询直接加条件

Auth::user()->reviews()返回的是Eloquent查询构造器实例,直接链式追加where条件过滤reviews表的status字段即可,建议加表前缀避免多表关联时出现字段冲突:

$activeReviews = Auth::user()->reviews()->where('reviews.status', true)->get();

高频使用场景封装关联方法

如果经常需要查询用户的有效评论,可以直接在User模型中新增专属关联方法,减少重复代码:
在User模型中添加如下方法:

/**
 * 关联当前用户所有已启用的评论
 */
public function activeReviews()
{
    return $this->belongsToMany(Review::class, 'review_user')
        ->where('reviews.status', true)
        ->withTimestamps();
}

后续调用时直接使用封装好的关联即可:

$activeReviews = Auth::user()->activeReviews()->get();

预加载场景下的条件过滤

如果是在预加载用户数据的场景下需要过滤评论,使用带闭包的预加载即可:

// 预加载当前用户的有效评论
$user = Auth::user()->load(['reviews' => function ($query) {
    $query->where('status', true);
}]);

// 直接通过属性获取过滤后的评论集合
$activeReviews = $user->reviews;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:57:04