2017-01-03 2 views
-1

Link for tableNicht alle Tabellendaten bekommen, während die Laravel Abfrage ausgeführt

link for expected result, after group by 'receiver_user_id' and recent time

ich die Laravel Abfrage verwendet haben: -

$sub = BaseMessagesHistory::select('messages_history.*')->orderBy('created_at','DESC'); 

     $chats = DB::table(DB::raw("({$sub->toSql()}) as sub")) 
      ->select('receiver_user_id',DB::raw('max(created_at) as recent_time')) 
      ->where('sender_user_id',$userId) 
      ->orwhere('receiver_user_id',$userId) 
      ->groupBy('receiver_user_id') 
      ->havingRaw('max(created_at)') 
      ->latest()->get(); 

Ergebnis: -

Ich erhalte nur "recent_time" und "receiver_user_id"

Bsp pectation: - Ich brauche ganze Daten aus der Tabelle nicht nur „recent_time“ und „receiver_user_id“

So können Sie mir bitte helfen

+0

irgendwelche Hilfe bitte helfen Sie mir? –

+2

** Ich bekomme nur "recent_time" und "receiver_user_id" **, Grund: '-> select ('receive_user_id', DB :: raw ('max (created_at) als recent_time'))' –

+0

trotzdem am besten zu ' -> toSql() 'Ihre Abfrage, um es zu debuggen. –

Antwort

2

Es wird Sie nur die Spalten zurück, die Sie in der Auswahl erwähnt(). In Ihrer Abfrage erwähnten Sie nur receriver_user_id und recent_time.

->select('receiver_user_id',DB::raw('max(created_at) as recent_time')) 

Sie müssen alle Spalten in select() hinzufügen, die Sie benötigen.

Oder versuchen, diese ->select('sub.*',DB::raw('max(created_at) as recent_time'))

Hoffnung, das hilft. Fragen Sie im Zweifelsfall.

+0

Ich erhalte Fehler –

+0

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1055 'sub.id' ist nicht in GROUP BY (SQL: wählen Sie 'sub'. *, Max (created_at) als recent_time von (wählen Sie 'messages_history '. * aus' messages_history' nach 'created_at' desc) als sub wo' sender_user_id' = 138 oder 'receiver_user_id' = 138 group nach' receiver_user_id' mit max (created_at) order by 'created_at' desc) –

+0

any help please? –

Verwandte Themen