我正在尝试使用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');
}
答案 0 :(得分:0)
您可以使用HasOne
关系:
public function latestMessage() {
return $this->hasOne(Message::class)->latest();
}
$allConvs = Conversation::with('latestMessage')->get();
这仍将在后台获取所有消息,但每次对话仅显示最新消息。