Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:使用可选用户输入进行雄辩的过滤_Php_Variables_Laravel_Eloquent - Fatal编程技术网

Php 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

我在我的laravel网站上有一个新闻故事列表。在
/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);