2016-10-19 3 views
0

Ich habe eine eloquente Abfrage, die die 10 am häufigsten gefundenen Namen in einer Tabelle zurückgibt.Update auf Auswahl zählen mit eloquent

$topPeople = $model 
    ->select(['name', DB::raw('COUNT(*) as count')]) 
    ->groupBy('name') 
    ->orderBy('count', 'desc') 
    ->take(10) 
    ->get(); 

Das funktioniert gut für die Rückgabe von Ergebnissen, aber ich möchte diese Datensätze aktualisieren, anstatt die Daten zurückzugeben. Wenn ich update anstelle von get verwende;

$model 
    ->select(['name', DB::raw('COUNT(*) as count')]) 
    ->groupBy('name') 
    ->orderBy('count', 'desc') 
    ->take(10) 
    ->update(['popular' => 1]); 

Ich bekomme den Fehler;

SQLSTATE [42S22]: Column nicht gefunden: 1054 Unknown column 'count' in 'bestellt Klausel'

Was ist ein effizienter Weg, um das popular Feld in diesen Aufzeichnungen zu aktualisieren?

Antwort

2

Wählen Sie die IDs und verwenden Sie diese, um das Update durchzuführen. Hier ist ein Beispiel mit Ihrem Code, leicht verändert:

$topPeople = SomeModel 
    ->select(['id', DB::raw('COUNT(*) as count')]) 
    ->groupBy('id') 
    ->orderBy('count', 'desc') 
    ->take(10) 
    ->pluck('id'); 

SomeModel::whereIn('id', $topPeople)->update(['popular' => 1]); 
+0

zupfen! Das ist die Funktionalität, die ich suchte, danke – myol

+0

Froh, dass es geholfen hat. :) –

Verwandte Themen