2017-02-08 6 views
2

Es aufgrund von Änderungen in MySQL scheint 5.7 oder höher ist, wird der SQL-Modus ONLY_FULL_GROUP_BY standardmäßig so guten alten Code aktivieren, damit hatte ich die wie folgt aussah:Wie erhält man alle eindeutigen Zeilen basierend auf einer bestimmten Spalte?

Table::where('name', 'LIKE', '%'.$search_str.'%') 
    ->groupBy('name') 
    ->get(); 

jetzt den Fehler wirft ...

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 

Ich habe versucht, meinen Code auf verschiedene Arten zu aktualisieren, um es zum Laufen zu bringen, aber kein Glück.

Das ist, was ich habe zur Zeit:

Table::where('name', 'LIKE', '%'.$search_str.'%') 
    ->selectRaw('name, ANY_VALUE(id), ANY_VALUE(col_a), ANY_VALUE(col_b), ANY_VALUE(col_c), ANY_VALUE(col_d)') 
    ->groupBy('name') 
    ->get(); 

Diese werfen keine Fehler, aber die Spaltendaten fehlt.

habe ich auch versucht:

Table::where('name', 'LIKE', '%'.$search_str.'%') 
    ->groupBy('name') 
    ->groupBy('id') 
    ->get(); 

Welche nicht zurück unterschiedlichen Zeilen basierend auf 'name'. Es gibt einfach alles zurück.

Wie kann ich dies in Laravel Eloquent oder rohe MySQL tun?

+0

Haben Sie versucht '-> distinct() -> get();' – EddyTheDove

+0

Ich habe auch in distinct() untersucht. Es gibt nur eine Zeile zurück. Ich versuche mehrere Zeilen zu bekommen. – rotaercz

Antwort

0

Die Methode groupBy() gruppiert die Elemente der Sammlung nach einem bestimmten Schlüssel. Sie sollten zuerst eine Sammlung erhalten:

Table::where('name', 'LIKE', '%'.$search_str.'%') 
    ->get() 
    ->groupBy('name'); 
+0

Dies liefert immer noch alle Ergebnisse, aber in Gruppen. Ich möchte nur eindeutige Zeilen basierend auf dem Namen. Es wäre am besten, wenn die Abfrage selbst alles behandeln könnte. Dies erfordert, die Datenbank zu schlagen und auch das Abfrageergebnis zu manipulieren, damit es auch langsamer wird. – rotaercz

+0

@rotaercz Für diesen Versuch: 'Table :: select ('name') -> groupBy ('name') -> get();' –

+0

Das würde nicht funktionieren, weil ich die vollständige Zeile mit allen Spalten es brauche. Die Spalten können eindeutige Werte haben oder nicht. – rotaercz

0

In config/database.php Datei ändern 'strict' => true,-'strict' => false, und versuchen

Table::where('name', 'LIKE', '%'.$search_str.'%') 
->groupBy('name') 
->get(); 

Ich bin nicht sicher, ob Sie für diese suchen.

+0

Das würde wahrscheinlich funktionieren, aber ich möchte es streng halten und es zur Arbeit bringen. – rotaercz

Verwandte Themen