sql >> Database teknologi >  >> RDS >> PostgreSQL

Laravel 5-opdatering af enkeltrækkegrænsen virker ikke

I modsætning til Oracle eller MySQL opdater erklæringer ved hjælp af LIMIT direkte på PostgreSQL-opdateringserklæringer er ikke muligt. Så kæde limit(1) metoden til Query Builder-instansen ikke gør noget, fordi compileUpdate metode fra Laravels PostgresGrammar klasse, der er ansvarlig for at kompilere forespørgslen, kompilerer kun where-sætningerne.

Du kan dog overvinde dette ved at have en betingelse, der bruger en underforespørgsel, som kun returnerer én række, der vil blive opdateret. Noget som dette burde virke:

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', ...) betingelse antager, at din tabel har en kolonne med navnet id der kan bruges som en unik identifikator, så den kan finde den første række, der matcher dine betingelser i underforespørgslen.




  1. PHP/MYSQLI:mysqli_query fejler i PHP

  2. Python JSON encoder til at understøtte datetime?

  3. Sådan finder du det underordnede projekt for et overordnet projekt, som er godkendt i 'WHERE'-sætningen, og også for at finde de duplikerede objekter

  4. SQL - Ufuldstændig kombination