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

PHP三元运算符(内联if语句):多行Laravel查询代码转单行

简化Laravel用户统计查询的正确写法

你的需求很明确——想把那段分分支的查询代码简化成单行,用三元运算符实现。先看你原来的代码逻辑:

if (Auth::user()->id != 1){ 
    echo User::where('owner', Auth::user()->id)->where('status', 2)->count(); 
}else { 
    echo User::where('status', 2)->count(); 
}

你之前尝试的写法问题出在把三元运算符插在了链式调用的中间,语法上不成立。正确的做法是把整个查询构造器的不同分支放在三元运算符的两个选项里,最后统一调用count(),这样就能写成单行:

三元运算符单行实现

echo (Auth::user()->id != 1 ? User::where('owner', Auth::user()->id)->where('status', 2) : User::where('status', 2))->count();

这个写法的逻辑和你原来的代码完全一致:当当前用户ID不是1时,返回带有owner和status条件的查询构造器;如果是ID为1的用户,返回只有status条件的构造器,最后统一执行count()统计数量。

更推荐的Laravel风格写法

不过我更建议用Laravel查询构造器自带的when方法,它专门用来根据条件动态添加查询约束,代码可读性更强,也避免了重复写where('status', 2):

echo User::where('status', 2)
    ->when(Auth::user()->id !== 1, function ($query) {
        $query->where('owner', Auth::user()->id);
    })
    ->count();

如果喜欢更紧凑的单行写法,还可以用箭头函数简化:

echo User::where('status', 2)->when(Auth::user()->id !== 1, fn($q) => $q->where('owner', Auth::user()->id))->count();

when方法的逻辑很直观:第一个参数是判断条件,当条件为true时,就执行第二个参数里的闭包,给查询添加额外的约束,这样代码逻辑清晰,也更符合Laravel的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:59:45