2017-10-07 2 views
5

Ich war neugierig zu wissen, ob Laravel eloquent nur eine Abfrage zum Aktualisieren einer Zeile ausführt. Also habe ich versucht, die folgendenLaravel Eloquent Führt zwei Abfragen beim Update aus?

Route::get('/cli', function(){ 
    DB::enableQueryLog(); 

    $client = Client::findOrFail(1); 
    $client->first_name = 'Noob'; 
    $client->save(); 
    return response()->json([ 
     'client' => $client->first_name, 
     'query' => DB::getQueryLog() 
    ], 200); 
}); 

Dies gab mir das folgende Ergebnis

{ 
    "client": "Noob", 
    "query": [{ 
       "query": "select * from `clients` where `clients`.`id` = ? limit 1", 
    "bindings": [ 
      1 
     ], 
    "time": 0.71 
}, 
{ 
     "query": "update `clients` set `first_name` = ?, `updated_at` = ? where `id` = ?", 
     "bindings": [ 
      "Noob", 
      "2017-10-07 12:03:05", 
      1 
     ], 
     "time": 3.36 
} 
] 
} 

Also dachte ich über die DB-Fassade mit.

Route::get('/cli', function(){ 
    DB::enableQueryLog(); 
$client = DB::select("update clients set first_name= 'Admin test' WHERE id=1"); 

    return response()->json([ 
     'client' => $client->first_name, 
     'query' => DB::getQueryLog() 
    ], 200); 
}); 

und das Ergebnis ist

{ 
"client": [], 
"query": [ 
{ 
"query": "update clients set first_name= 'Admin test' WHERE id=1", 
"bindings": [], 
"time": 3.2 
} 
] 
} 

Dieses nur eine Abfrage ausgeführt, obwohl es nicht die Client-Instanz zurückgegeben hat. Meine Frage ist, für einen High-Traffic-Server, welche Methode oder Strategie benötigt wird? Gibt es noch andere bessere Techniken oder Tricks, die eloquent verwendet werden können?

Antwort

4

Sie unter Abfrage ändern können

$client = DB::select("update clients set first_name= 'Admin test' WHERE id=1"); 

zu

$data=['first_name'=>'Admin test']; 
    Client::where('id', '=', 1)->update($data); 

beredt Wenn ich Ihre Frage richtig verstanden dann in der ersten Abfrage Sie auswählen und dann Wert zu aktualisieren, so dass es auf jeden Fall zwei Abfragen ausführen wird . In Ihrer zweiten Methode holen Sie keine Gedanken von db, so dass es schneller sein wird als zuerst

+0

Eine weitere kurze Frage. Ist DB :: select() schneller als eloquent? –

+1

ich denke nicht, dass es viel Leistungsproblem unterscheiden wird. In großen Join-Abfragen kann es schnellere Leistung geben. Eloquent ist viel Lesbarkeit – iCoders

Verwandte Themen