За разлика от Oracle
или MySQL
актуализирайте изрази, като използвате LIMIT
директно на изявления за актуализиране на PostgreSQL
не е възможно. Така че веригата на limit(1)
метод към екземпляра на Query Builder не прави нищо, защото compileUpdate
метод от PostgresGrammar
на Laravel клас, който отговаря за компилирането на заявката, компилира само изразите 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
който може да се използва като уникален идентификатор, така че да може да намери първия ред, който отговаря на вашите условия в подзаявката.