我有2个型号:
class Message extends Eloquent {
public function conversation(){
return $this->belongsTo('Conversation', 'conversationId');
}
public function sender(){
return $this->belongsTo('User', 'senderId')->select('id', 'userName');
}
public function receiver(){
return $this->belongsTo('User', 'receiverId')->select('id', 'userName');
}
}
class DeskConversation extends Eloquent {
}
我想要的是获取每个对话的所有最后消息(包含在给定数组中的那些消息)...换句话说,我想进行一些对话,并且对于每个对话,只有最后一条消息是交换。
我能够通过以下方式获取所有给定对话的所有消息:
return Message::whereHas('conversation', function($query) use ($convIds) {
$query->whereIn('id', $convIds);
})->with('sender')->with('receiver')->orderBy('conversationId')->orderBy('id', 'DESC')->get();
其中$convIds
是一组ids。
如何为每个对话仅拍摄最后一条消息?
P.S。两个模型都有时间戳字段。
答案 0 :(得分:3)
这就是你需要的:
/**
* Conversation has one latest Message
*
* @return Illuminate\Database\Eloquent\Relations\HasOne
*/
public function latestMessage()
{
return $this->hasOne('Message')->latest();
}
然后只是:
$conversations = Conversation::with('latestMessage')->get();
// then each latest message can be accessed:
$conversation->latestMessage;
$conversations->first()->latestMessage;