2017-06-25 4 views
0

Ich bin neu in Laravel und ich möchte MySQL-Abfrage in Laravel 5.4 schreiben. Abfrage ist wie:Wie schreibe ich mysql Abfrage in Laravel 5.4?

Anmerkung: Spaltennamen vermeiden ..

SELECT * 
FROM (SELECT DISTINCT * 
     FROM messages 
     WHERE (from_id=1 OR to_id=1) 
ORDER BY created DESC) as m 
GROUP BY `from_id` 

Ich habe versucht, aber gibt Fehler.

$messages = DB::table('messagetbl') 
       ->select('*') 
       ->Where(function($query) use ($userid){ 
        $query->distinct() 
        ->where('senderid',$userid) 
        ->orWhere('receiverid',$userid) 
        ->orderBy('datetime','desc'); 
       }) 
       ->groupBy('senderid') 
       ->get(); 

Fehler:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.messagetbl.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select * from messagetbl where (senderid = 8 or receiverid = 8) group by senderid)

Vielen Dank im Voraus.

+0

den vollständigen Stack-Trace des Fehlers hinzufügen und deutlicher das Problem erklären. Siehe [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/help/how-to-ask), um Ihre Frage zu aktualisieren. –

Antwort

0

Ich glaube, das so etwas wie:

DB::table('messages') 
     ->select('*') 
     ->where('form_id', '=', 1) 
     ->orWhere('to_id', '=', 1) 
     ->orderBy('created', 'desc') 
     ->groupBy('form_id') 
     ->distinct() 
     ->get(); 
+0

Fehler: Syntaxfehler oder Zugriffsverletzung: 1055 Expression # 1 der SELECT-Liste ist nicht in der GROUP BY-Klausel und enthält nichtaggregierte Spalte 'db.messagetbl.id', die funktionell nicht von Spalten in der GROUP BY-Klausel abhängig ist; das ist inkompatibel mit sql_mode = only_full_group_by –

+0

reset sql_mode in der config/app.php: 'Datenquellen' => [ 'default' => [ 'className' => 'Kuchen \ Datenbank \ Verbindung', 'driver' => 'Cake \ Database \ Driver \ Mysql', 'persistent' => false, 'host' => 'localhost', ... 'init' => [ "SET sql_mode = ''"], ] , –

+0

können Sie erklären, welcher Fehler ist es? es hängt mit einem primären Schlüsselproblem oder was zusammen. –