PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Laravel 5 memperbarui batas baris tunggal tidak berfungsi

Berbeda dengan Oracle atau MySQL perbarui pernyataan, menggunakan LIMIT langsung di Pernyataan pembaruan PostgreSQL itu tidak mungkin. Jadi merantai limit(1) metode ke instance Query Builder tidak melakukan apa-apa, karena compileUpdate metode dari PostgresGrammar Laravel class yang bertanggung jawab untuk mengkompilasi query, hanya mengkompilasi pernyataan where.

Namun Anda bisa mengatasinya dengan memiliki kondisi yang menggunakan subquery yang hanya mengembalikan satu baris yang akan diperbarui. Sesuatu seperti ini seharusnya bekerja:

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', ...) kondisi mengasumsikan tabel Anda memiliki kolom bernama id yang dapat digunakan sebagai pengidentifikasi unik sehingga dapat menemukan baris pertama yang cocok dengan kondisi Anda di subquery.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan nama kolom atau tabel Postgres membutuhkan tanda kutip dan kapan tidak?

  2. Bagaimana cara mengubah database postgres ke sqlite

  3. Mengoptimalkan banyak gabungan

  4. PostgreSQL Query dengan kolom dinamis dan jumlah dari join

  5. Kesalahan saat menginstal psycopg2==2.6.2