sql >> Databasteknik >  >> RDS >> PostgreSQL

Laravel 5 uppdaterar en radgräns fungerar inte

Till skillnad från Oracle eller MySQL uppdatera uttalanden med LIMIT direkt på PostgreSQL-uppdateringsuttalanden är inte möjligt. Så kedja limit(1) metod till Query Builder-instansen gör ingenting, eftersom compileUpdate metod från Laravels PostgresGrammar klass som är ansvarig för att kompilera frågan, kompilerar endast where-satserna.

Du kan dock övervinna detta genom att ha ett villkor som använder en underfråga som bara returnerar en rad som kommer att uppdateras. Något sådant här borde fungera:

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', ...) villkoret förutsätter att din tabell har en kolumn med namnet id som kan användas som en unik identifierare så att den kan hitta den första raden som matchar dina villkor i underfrågan.




  1. PostgreSQL-logganalys med pgBadger

  2. mysqli-frågan returnerar endast första raden

  3. Hur man infogar UUID i kolumnen RAW(16).

  4. SQL, Unika och Primära nycklar