PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Laravel 5 актуализира ограничението за един ред не работи

За разлика от 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 който може да се използва като уникален идентификатор, така че да може да намери първия ред, който отговаря на вашите условия в подзаявката.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Попълване на поле Many2many (odoo 8)

  2. Oracle DBMS_LOB.WRITEAPPEND към Преобразуване на Postgres

  3. Преобразуване на сумата на PostgreSQL като bigint

  4. Деактивиране на DELETE на таблица в PostgreSQL?

  5. Как да получите достъп до db изгледи с помощта на модели на Laravel?