2016-11-02 157 views
0

使用儀表板構建聊天應用程序,並試圖獲取其他用戶發送的最後一條消息的通知。GroupBy和OrderBy Laravel Eloquent

這裏是我的模型關係:

public function messages() { 
    return $this->hasMany('App\Message', 'author_id'); 
} 

public function lastMessage() { 
    return $this->hasMany('App\Message', 'recipient_id')->orderBy('created_at', 'DESC')->groupBy('author_id'); 
} 

在我無法弄清楚的事情是不是返回,因爲它應該通過使用排序依據排序的最後一條消息,則返回該組中存在的第一條記錄數據庫。

看了看網上,但似乎無法找到任何有關此信息。我發現唯一的一個帖子是有人說,在laravel的orderBy和groupBy在一起玩的不好。

任何幫助表示讚賞!

回答

0

而不是重新定義lastMessage中的關係,您可以嘗試從它調用messages,然後從中運行您的查詢。

沒有看到您的更多模型模式(即:其中在這些關係定義??),這可能不是完美的,但它是一個開始:

public function lastMessage() 
{ 
    return $this->messages() // <-- Notice the()...this creates a query instead of immediately returning the relationship 
     ->where('recipient_id', $this->id) // Not sure if this is correct, might need to adjust according to how you have defined the tables 
     ->orderBy('created_at', 'desc') 
     ->first(); 
} 

它將查詢與鏈接的messages關係列出的約束條件。通過返回first()它只返回一個記錄而不是一個集合。

+0

今晚我會圍繞你的建議去看看我能不能找出答案。事情是,我不想檢索1條消息,我正在尋找檢索每個活動對話的最後一條新消息,以便投入通知。因此,如果3個用戶向我反饋了我與他們之間的對話,我希望這些消息看起來像是類似於Facebook的「新通知」。我希望這是有道理的。這就是爲什麼我使用groupBy() – max234435