Laravel:如何在日期范围内筛选仅更新的Job记录
解决Laravel中统计真正更新过的Job数量的问题
嘿,你提到的andWhere其实在Laravel里并不存在,但别担心——Laravel的查询构造器默认就支持链式添加AND条件的where方法,而且针对你需要比较两个数据库列的场景,还有更合适的写法!
你的核心需求是排除那些updated_at和created_at值完全相同的记录(也就是只创建没更新的Job),这里最优雅的方式是使用whereColumn方法,它专门用来比较表中的两个字段值。修改后的代码如下:
$jobsUpdated = Job::where('id', $id) ->whereBetween('updated_at', [$value['fromDate'], $value['tillDate']]) ->whereColumn('updated_at', '!=', 'created_at') ->count();
为什么用whereColumn?
直接用where('updated_at', '!=', 'created_at')会把created_at当成字符串字面量处理,而不是数据库列,这样会导致查询错误。whereColumn会正确识别两个参数都是数据库字段,生成的SQL会是:
WHERE updated_at != created_at
如果你不想用whereColumn,也可以借助DB::raw来实现相同效果:
use Illuminate\Support\Facades\DB; $jobsUpdated = Job::where('id', $id) ->whereBetween('updated_at', [$value['fromDate'], $value['tillDate']]) ->where('updated_at', '!=', DB::raw('created_at')) ->count();
两种方式都能满足你的需求,但whereColumn是Laravel推荐的更简洁、安全的写法,它还支持处理字段的比较逻辑(比如>、<等),非常适合这类列与列的对比场景。
内容的提问来源于stack exchange,提问作者ejntaylor
相关产品推荐
相关产品推荐

