sql >> Database >  >> RDS >> PostgreSQL

Laravel 5 update enkele rij limiet werkt niet

In tegenstelling tot Oracle of MySQL update-instructies, met behulp van LIMIT rechtstreeks op PostgreSQL-update-statements is niet mogelijk. Dus het koppelen van de limit(1) methode naar de Query Builder-instantie doet niets, omdat de compileUpdate methode uit Laravel's PostgresGrammar class die verantwoordelijk is voor het compileren van de query, compileert alleen de waar-instructies.

U kunt dit echter ondervangen door een voorwaarde te hebben die een subquery gebruikt die slechts één rij retourneert die wordt bijgewerkt. Iets als dit zou moeten werken:

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]);

De whereIn('id', ...) voorwaarde gaat ervan uit dat uw tabel een kolom heeft met de naam id die kan worden gebruikt als een unieke identificatie, zodat deze de eerste rij kan vinden die overeenkomt met uw voorwaarden in de subquery.




  1. MySQL:tel de verschillende rijen per dag

  2. MySQL:wat is een pagina?

  3. Laravel Eloquent krijgt resultaten gegroepeerd op dagen

  4. Zoek naar een model gegeven prijsklasse in verschillende valuta's