如何在Laravel中获得方法关系的最后一行?

时间:2018-08-10 20:49:15

标签: laravel-5 eloquent

我正在尝试使用laravel构建聊天应用程序,我有两个表,一个用于对话,另一个用于消息,我希望每个表与最新消息的对话。这是我尝试过的查询:

$allConvs = Conversation::with(['messages' => function ($query) {
  $query->latest()->first();
}])    
->get();

但是,它仅针对第一个对话返回最后一条消息,而对于其他对话则返回null。还有其他方法吗? 这是我的关系

Conversation.php

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

Message.php

    public function conversation()
{
    return $this->belongsTo('App\Conversation' ,'id', 'conversation_id');
}

1 个答案:

答案 0 :(得分:0)

您可以使用HasOne关系:

public function latestMessage() {
    return $this->hasOne(Message::class)->latest();
}

$allConvs = Conversation::with('latestMessage')->get();

这仍将在后台获取所有消息,但每次对话仅显示最新消息。