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

Laravel如何根据布尔参数动态加载Eloquent关联关系

实现方案

你可以直接使用 Eloquent 查询构造器自带的 when() 方法完成需求,该方法就是为条件链式调用设计的,完全不需要手写if分支:

  • 基础写法
$users = User::when($load, function ($query) {
    return $query->with('login');
})->paginate();

when()方法第一个参数为判断条件,返回true时会执行第一个闭包的查询逻辑,返回false则直接跳过闭包,继续执行后续的查询链。

  • PHP 7.4+ 简写版(箭头函数)
$users = User::when($load, fn($query) => $query->with('login'))->paginate();
  • 可复用封装方案
    如果多个地方都需要用到这个逻辑,可以把它封装成模型的本地作用域,调用更简洁:
    首先在User模型中定义作用域:
public function scopeLoadLoginWhen($query, bool $condition)
{
    return $query->when($condition, fn($q) => $q->with('login'));
}

业务代码中直接调用即可:

$users = User::loadLoginWhen($load)->paginate();

注意:你原代码中的 User::all()->paginate() 是错误用法,all() 会直接执行SQL返回集合实例,集合不存在paginate()方法,直接在查询链末尾调用paginate()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:24:00