在Laravel中过滤集合的最佳方式是什么?


What is the best way to filter collection in Laravel?

我正在考虑一个最好的解决方案,同时一个懒惰的解决方案,过滤收集雄辩的结果在Laravel。我想过滤所有控制器中的$videos集合。不重写控制器,而是把它放在模型中,这是可能的吗?

下面是我的过滤器代码:
$videos = $videos->filter(function( $video ){
        return $video->isPublished();
    });

使用查询范围。你可以从这里学习。在你的例子中,应该是这样的:

class Video extends Eloquent {
    public function scopePublished($query)
    {
        return $query->where('published', '1');
    }
}
class VideosController extends BaseController {
    public function showPublishedVideos()
    {
        return View::make('published_videos')
                   ->with('videos', Video::published()->take(10)->get());
    }
}