Php Laravel:使用可选用户输入进行雄辩的过滤
我在我的laravel网站上有一个新闻故事列表。在Php Laravel:使用可选用户输入进行雄辩的过滤,php,variables,laravel,eloquent,Php,Variables,Laravel,Eloquent,我在我的laravel网站上有一个新闻故事列表。在/news/页面上显示了一个故事的快速列表 现在我想允许用户过滤新闻。例如,只播放“体育”故事 在我的控制器中,我执行了以下操作: $input = Input::all(); $events = DB::table('news') ->where('category', '=', $input['type']) ->order_by('created_at', 'desc') -&g
/news/
页面上显示了一个故事的快速列表
现在我想允许用户过滤新闻。例如,只播放“体育”故事
在我的控制器中,我执行了以下操作:
$input = Input::all();
$events = DB::table('news')
->where('category', '=', $input['type'])
->order_by('created_at', 'desc')
->paginate(10);
现在,这允许我访问/news?type=sports
,它只正确地显示体育类别中的新闻项目。但这仅在给定类型时有效,如果没有给定类型,则显然会失败
解决这个问题的最佳方案是什么?我知道我可以检查一下,$input['type']
是否存在,如果存在,则编写一个全新的第二个“$news=DB::table('news')…”
代码,但我想我可能真的希望有多个用户输入,这将使该选项无法工作。例如,如果我想按类型和位置排序,该怎么办?类似于/news?type=sports&area=chicago
——那我该怎么办
我知道我肯定错过了一些明显的东西。有人能给我指出正确的方向吗?例如,我想你可以使用
foreach
循环
$input = Input::all();
因此,您将得到如下结果(您应该检查$input
是否不为空)
现在,选择如下表:
$events = DB::table('news');
现在loop
将$input
类似于(对于多个动态where
子句)
或者您可以使用orderBy
like(对于多个动态orderBy
子句)
或者你可以使用
$result = $users->paginate(10);
不过,您应该使用URI作为路由参数,而不是让它通过GET。谢谢,“断链”是一种方法。我没有使用你的循环,但你让我走上了正确的方向。@Jay,欢迎你,不要忘记与社区分享更好的想法,分享让事情变得更好。:-)
foreach ($input as $key => $value) {
$events->where($key, $value);
}
$result = $users->get();
$events = DB::table('news')->where('category', $input['type']);
foreach ($input as $key => $value) {
$events->orderBy($key); // also, you can use ASC/DESC as second argument
}
$result = $users->get();
$result = $users->paginate(10);