我有一个Conversation
这样的模型:
class Conversation extends Model
{
protected $primaryKey = 'conversation_id';
public function questions (){
return $this->hasMany('App\Question','conversation_id','conversation_id');
}
public function latestQuestion ()
{
return $this->hasOne('App\Question','conversation_id','conversation_id')
->orderBy('created_at', 'desc');
}
}
这样的Question
模型:
class Question extends Model
{
protected $primaryKey = 'question_id';
public function conversation ()
{
return $this->belongsTo('App\Conversation', 'conversation_id', 'conversation_id');
}
}
正如您所看到的,每个对话都可以有一些问题。
此外,Conversation模型具有latestQuestion
关系,可以获取该对话的最新问题。
现在,我想列出所有对话及其最新问题。
为此,我写道:
$conversations =
Conversation::
with('latestQuestion')
->orderBy('created_at','desc')
->get();
以上代码,按created_at
字段对对话进行排序。
但我想列出一个对话列表,将新问题的对话放在列表之上。事实上我想根据最新问题created_at
字段订购对话但是我不知道我该怎么做?
答案 0 :(得分:1)
您需要使用加入查询。因为Eager Loading只会带来基表并稍后获取引用的表记录
Conversation::join('questions', 'conversations.conversation_id', '=', 'questions.conversation_id')
->orderBy('questions.created_at','Desc')
->groupBy('conversations.conversation_id')
->get();