我们说这个名为消息
的表格+----+--------------+-------------+-----+
| ID | user_id | conv_id |body |
+----+--------------+-------------+-----+
|1..5| 1 | 1 | ... |
+----+--------------+-------------+-----+
| 6 | 1 | 3 | ... |
+----+--------------+-------------+-----+
| 7 | 1 | 3 |... |
+----+--------------+-------------+-----+
| 8 | 1 | 1 |... |
+----+--------------+-------------+-----+
| 9 | 1 | 2 |... |
+----+--------------+-------------+-----+
| 10 | 1 | 1 | ... |
+----+--------------+-------------+-----+
| 11 | 1 | 2 |... |
+----+--------------+-------------+-----+
| 12 | 1 | 4 |... |
+----+--------------+-------------+-----+
| 13 | 1 | 5 |... |
+----+--------------+-------------+-----+
| 14 | 1 | 4 |... |
+----+--------------+-------------+-----+
我想输出这个结果:
+----+--------------+-------------+-----+
|2..5| 1 | 1 | ... |
+----+--------------+-------------+-----+
| 10 | 1 | 1 | ... |
+----+--------------+-------------+-----+
| 7 | 1 | 3 | ... |
+----+--------------+-------------+-----+
| 11 | 1 | 2 | ... |
+----+--------------+-------------+-----+
| 13 | 1 | 5 |... |
+----+--------------+-------------+-----+
| 14 | 1 | 4 |... |
+----+--------------+-------------+-----+
是急切加载的结果。正如您所看到的,它会输出5条最新记录,其中conv_id = 1
加上每个其他conv_id
的最新记录。我该怎么做?
这是我的控制器代码和我尝试过的内容
$loginuser = User::find(Auth::user()->id);
//$allOpenConvMsgs is an array of 5 message IDs where `conv_id = 1`.
//The relationship between user and messages is many-to-many.
See model codes below
$newMessages = $loginuser->messages()->where(function($q){
$q->where(''); //I'm stuck here!
})->orWhereIn('messages.id',$allOpenConvMsgs);
消息模型
public function user(){
return $this->belongsToMany('User');
}
用户模型
public function messages(){
return $this->belongsToMany('Messages');
}
答案 0 :(得分:-1)
如果我明白你的意思,你可以这样做:
$loginuser = User::find(Auth::user()->id)->with(array('messages' => function($q){
$q->where('conv_id', '=', '1')->take(5)->orderBy('id', 'desc');
})->get();
$newMessages = $loginuser->messages;
<强>更新强>
根据David的建议,最好通过User
函数使用已经获取的Auth::user()
实例。
所以上面的代码将是:
$newMessages = Auth::user()->load(array('messages' => function($q){
$q->where('conv_id', '=', '1')->take(5)->orderBy('id', 'desc');
}))->messages;
更新2
以上代码仅获取conv_id = 1
的邮件,以获取您必须删除的所有最新邮件where
条件:
$newMessages = Auth::user()->load(array('messages' => function($q){
$q->take(5)->orderBy('id', 'desc');
}))->messages;