gpt4 book ai didi

php - Laravel 5 更新单行限制不起作用

转载 作者:行者123 更新时间:2023-11-29 12:19:22 25 4
gpt4 key购买 nike

我需要更新数据库 (PostgreSQL) 中的单个匹配记录,但 Limit 方法不能与 Update 方法一起使用。此代码将更新匹配 Where 条件的所有记录,而不是单个记录。

DB::table("records")
->where('need_moderate','=','no')
->where('locked_per_time','<',$date_now->format("Y-m-d H:i:s"))
->limit(1)
->update(["locked_per_time"=>$locked_per->format("Y-m-d H:i:s"),'locked_by'=>$mdkey]);

我该如何解决这个问题,以便只更新单个记录?

最佳答案

Oracle 不同或 MySQL更新语句,直接在 PostgreSQL update statements 上使用 LIMIT不可能。因此,将 limit(1) 方法链接到 Query Builder 实例不会执行任何操作,因为 compileUpdate来自 Laravel 的 PostgresGrammar 类的方法负责编译查询,只编译 where 语句。

不过,您可以通过使用子查询的条件来克服这个问题,该子查询只返回将要更新的一行。这样的事情应该有效:

DB::table("records")->whereIn('id', function ($query) use ($date_now) {
$query->from('records')
->select('id')
->where('need_moderate', '=', 'no')
->where('locked_per_time', '<', $date_now->format("Y-m-d H:i:s"))
->limit(1);
})->update(["locked_per_time" => $locked_per->format("Y-m-d H:i:s"), 'locked_by' => $mdkey]);

whereIn('id', ...) 条件假定您的表有一个名为 id 的列,该列可用作唯一标识符,因此它可以找到在子查询中与您的条件匹配的第一行。

关于php - Laravel 5 更新单行限制不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34911210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com