Lia*_*ter 22 php collections laravel eloquent laravel-4
我有一个名为'posts'的表,其中包含以下列:'post_id int primary incrementments','poster_id int'和'status text'以及名为friends的数组,其中包含以下列:'user_id int primary'和'friend_ids text'.
我需要获取朋友文本列中的所有ID,这很容易使用:
$friends = explode(',', \Friend::where('user_id', \Sentry::getUser()->id)->first()->friend_ids);
Run Code Online (Sandbox Code Playgroud)
文本列中的数据看起来像'1,2,3'等.
然后我创建一个Eloquent Collection对象,也可以通过以下方式轻松完成:
$posts = new \Illuminate\Database\Eloquent\Collection();
Run Code Online (Sandbox Code Playgroud)
但问题是我无法弄清楚如何填充集合并通过Post对象的'created_at'列对其内容进行排序.
这就是我现在所拥有的:
foreach ($friends as $id) {
$posts_ = \Post::where('poster_id', $id)->getQuery()
->orderBy('created_at', 'desc')
->get();
foreach($posts_ as $post) {
$posts->add($post);
}
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这个代码是否适用于通过'created_at'列对整个帖子集合进行排序.我还需要能够轻松地对整个集合进行分页.
对集合进行排序的推荐方法是什么?
Alt*_*rim 47
如果要对a进行排序collection
,可以使用sortBy
给定键的方法
$sorted = $posts->sortBy('created_at');
Run Code Online (Sandbox Code Playgroud)
你也可以在上面应用回调函数 collection
$sorted = $posts->sortBy(function($post)
{
return $post->created_at;
});
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.有关collections
您的更多信息,请阅读文档
您不需要遍历$friends
数组,您可以像这样将它与whereIn一起使用
$posts = \Post::whereIn('poster_id', $friends)->latest()->get();
Run Code Online (Sandbox Code Playgroud)
这取代了空集合创建和 -foreach
循环,并为您提供一个集合中的所有朋友帖子,按以下顺序排序created_at
(该latest
函数是 的快捷方式orderBy('created_at', 'desc')
)