【发布时间】:2014-08-11 20:26:04
【问题描述】:
(见下面的代码)
我有两个模型用户和消息。我想根据每个输入的对话 ID 获取 10 条消息-及其关联的发件人姓名并反转数据。我已经成功地收到了这些消息,但无法将每个对话/及其关联的发件人姓名缩减到 10 条消息。
-
我已经尝试用用户数据返回消息数据,但要么我不知道如何访问发件人的姓名,要么它不返回关联的用户:
$allMessages = Messages::with('User')->whereIn('conv_id',$conv_id); -
我也尝试过返回 10 条消息,但它会根据收到的所有消息而不是每次对话返回 10 条消息。
$allMessages = Messages::whereIn('conv_id',$conv_id)->take(10);
如何根据每个对话的 ID 以及消息的关联发件人姓名获取 10 条消息?改进代码的奖励积分。提前谢谢!
用户模型
public function messages(){
return $this->hasMany('Messages');
}
消息模型
public function user(){
return $this->belongsTo('User');
}
控制器
public function index()
{
$timestamps = Input::get('from'); //timestamp of latest message
$conv_id = Input::get('conv_id'); //array of conversation ids
$allMessages = Messages::whereIn('conv_id',$conv_id);
if(is_null($timestamps)){
$messages = $allMessages->orderBy('created_at','desc');
}else{
asort($timestamps);
$messages = $allMessages->where('created_at','>',end($timestamps));
}
return $messages->get()->reverse();
}
迁移
消息表
Schema::create('messages', function(Blueprint $table)
{
$table->increments('id');
$table->integer('user_id');
$table->integer('conv_id');
$table->text('body');
$table->timestamps();
});
用户表
Schema::create('users',function($table)
{
$table->increments('id');
$table->string('email')->unique();
$table->string('password',100);
$table->string('name',150);
$table->string('usertype',50);
$table->boolean('block');
$table->string('remember_token',100);
$table->timestamp('lastlogin_at');
$table->timestamps();
$table->softDeletes();
});
编辑:在 chrome 中 WereWolf 的答案的 var_dump 预览结果
0: {id:37, user_id:1, conv_id:2, body:damn mate, created_at:2014-06-20 00:55:32,…}
1: {id:38, user_id:1, conv_id:2, body:hello, created_at:2014-06-20 02:18:21,…}
2: {id:39, user_id:1, conv_id:2, body:dude, created_at:2014-06-20 02:20:10,…}
3: {id:40, user_id:1, conv_id:2, body:test, created_at:2014-06-20 06:52:37,…}
4: {id:67, user_id:1, conv_id:2, body:haha, created_at:2014-06-21 01:25:56,…}
5: {id:68, user_id:1, conv_id:2, body:hey, created_at:2014-06-21 01:26:14, updated_at:2014-06-21 01:26:14,…}
6: {id:69, user_id:1, conv_id:1, body:testa, created_at:2014-06-21 01:27:02,…}
7: {id:70, user_id:1, conv_id:1, body:testser, created_at:2014-06-21 01:27:32,…}
8: {id:115, user_id:1, conv_id:2, body:haha, created_at:2014-06-21 02:45:06,…}
9: {id:116, user_id:1, conv_id:2, body:test, created_at:2014-06-21 02:57:03,…}
【问题讨论】:
标签: php laravel laravel-4 eloquent one-to-many