2016-05-09 18 views
1

ich folgende einfache Abfrage, um zu versuchen die letzte aktualisierte Zeile pro module zu erhalten:Bestellung per updated_at pro Gruppe

$distincts = SerialNumber::where('company_id', Auth::user()->active_company_id) 
     ->groupBy('module') 
     ->orderBy('updated_at', 'desc') 
     ->get(); 

Das ist nicht so, wie ich es will nicht funktioniert. Jede Zeile in der module Gruppe wird nicht von updated_at (das ist ein Datumsstempel) bestellt.

Wie kann ich orderBy für jede Zeile in einer Gruppe verwenden? Danke fürs Lesen!

Die folgenden Werke, sondern ist eine sehr schlechte Lösung:

$distincts = array(); 

    $modules = SerialNumber::select('module') 
     ->where('company_id', Auth::user()->active_company_id) 
     ->groupBy('module') 
     ->pluck('module'); 

    foreach ($modules as $mod) { 
     $se = SerialNumber::where('company_id', Auth::user()->active_company_id) 
      ->where('module', $mod) 
      ->orderBy('updated_at', 'desc') 
      ->first(); 

     $distincts[] = $se; 
    } 

Antwort

1

Was Sie brauchen, ist eine Unterabfrage:

$query = SerialNumber::orderBy('updated_at', 'desc')->getQuery(); 

$distincts = DB::table(DB::raw("(". $query->toSql() . ") as subQuery")) 
    ->where('company_id', Auth::user()->active_company_id) 
    ->groupBy('module') 
    ->get(); 

Dies macht, dass Sie nur die neuesten Einträge in der Gruppe erhalten.

+0

SQL-Fehler: SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, um die richtige Syntax für 'select * aus 'serial_numbers' nach' updated_at' desc aus 'serial_numbers' in Zeile 1 zu verwenden (SQL: wählen Sie * aus' serial_numbers' aus 'update_at' desc von' serial_numbers' wobei 'company_id' = 1 group by' module') –

+0

Nach einigen weiteren Tests scheint diese Abfrage nicht zu funktionieren. Zum Beispiel hat in einem 'contact_report'-Modul meine letzte Zeile 'updated_at' eine 'index_number' von 20. Die Abfrage gibt 16 zurück, aber ich verstehe nicht warum. Hier ist ein Dump aller Ergebnisse: http://hastebin.com/lasazejuxe.coffee –

+0

in diesem speziellen Beispiel scheint es, dass Sie hinzufügen müssen: '-> groupBy ('Modul', 'index_number'), weil es ausgeblendet wurde while; e Gruppierung und war thikin zuerst. Versuch es. –

Verwandte Themen