Laravel 雄辩的一对多订货人
我正在和雄辩者合作一对多的关系 我想使用用户在上一次发布日期时创建的方式来订购用户,但我不知道如何才能做到这一点 表格用户:Laravel 雄辩的一对多订货人,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我正在和雄辩者合作一对多的关系 我想使用用户在上一次发布日期时创建的方式来订购用户,但我不知道如何才能做到这一点 表格用户: id | name 1 | John 2 | Doe 3 | Foo 4 | ... 表员额: id | title | body | user_id | created_at 1 | Title 1| Body1 | 1 | 2014-03-06 14:00:00 2 | Title 2| Body2 | 1 |
id | name
1 | John
2 | Doe
3 | Foo
4 | ...
表员额:
id | title | body | user_id | created_at
1 | Title 1| Body1 | 1 | 2014-03-06 14:00:00
2 | Title 2| Body2 | 1 | 2014-03-04 14:00:00
3 | Title 3| Body3 | 2 | 2014-03-03 14:00:00
4 | Title 4| Body4 | 3 | 2014-03-05 14:00:00
所需的最终输出示例:
name | title | created_at
John | Title 1 | 2014-03-06 14:00:00
Foo | Title 4 | 2014-03-05 14:00:00
Doe | Title 3 | 2014-03-03 14:00:00
我能接近的是:
$users = User::with(['posts' => function($query){
$query->orderBy('created_at', 'desc');
}])->get();
但是这段代码提取每个用户的所有帖子,我只想要最后一篇
你能帮我吗?谢谢
更新:我终于找到了我想要的东西:检索用户的最后一篇文章,并按照最后一篇文章的时间戳的升序对用户进行排序。请随意改进此查询
$users = DB::table('posts')
->join('users', 'posts.user_id', '=', 'users.id')
->select(DB::raw('posts.id, posts.user_id, MAX(created_at) as created_at'))
->groupBy('posts.user_id')
->orderBy('created_at', 'asc')
->get();
你可以试试这个:
$users = User::with(array('posts' => function($query){
$query->orderBy('created_at', 'desc')->groupBy('user_id');
}))->get();
$users = User::join('posts', 'users.id', '=', 'posts.user_id')
->orderBy('posts.created_at', 'desc')
->groupBy('posts.user_id')
->select('users.*', 'posts.created_at as postTime')
->get();
更新:您可以尝试以下操作:
$users = User::with(array('posts' => function($query){
$query->orderBy('created_at', 'desc')->groupBy('user_id');
}))->get();
$users = User::join('posts', 'users.id', '=', 'posts.user_id')
->orderBy('posts.created_at', 'desc')
->groupBy('posts.user_id')
->select('users.*', 'posts.created_at as postTime')
->get();
我只从posts表中选择了created_,但您可以在select中添加更多字段,如:
我相信你要么必须使用稍微复杂一点的usort,要么可以使用连接,但是使用这种方法,你也会失去雄辩建立关系的方式 使用usort
这是答案的一半。现在,我只获得用户集合中的最后一个发布数据。现在,我想根据用户最后一次发布的时间戳对其进行排序。我真的不知道该怎么做。我的结构是否错误?请检查更新的答案。如果使用$users->toArray,结果将是一个不同的联接表,但您可以使用类似$users->first->posts->first的内容。非常感谢!正是我要找的!通过此查询,是否有一种简单的方法可以使用posts.created_at重新排序,但按升序排序?换句话说,以升序获取用户的最后一篇文章。对不起!我认为这是不可能的,但如果可能的话,我会发帖的。
$users = DB::table('posts')
->select(DB::raw('MAX(`posts`.`created_at`) AS `created_at`, `user_id`, `users`.*'))
->orderBy('posts.created_at', 'desc')
->groupBy('posts.user_id')
->join('users', 'users.id', '=', 'posts.user_id')
->get();