【问题标题】:Filter with several options php mysql过滤多个选项 php mysql
【发布时间】:2017-04-27 21:15:26
【问题描述】:

我有一个度假旅游数据库,想同时按 3 个参数(目的地国家/地区、出发日期、酒店)对其进行排序。

所以我以 html 形式创建了三个输入(目的地、日期、酒店)

<form action="/search-tours" method="GET">
<input name="destination" type="text">
<input name="date" type="date">
<input name="hotel" type="text">
<button type=submit>Search tours</button>

我正在使用 Laravel,所以我的 php 代码在控制器中(“Tour”是模型 = 连接到数据库中的“tours”表)。

        $destination = $request->get('destination');
        $date = $request->get('date');
        $hotel = $request->get('hotel');


        $tours = Tour::where('destination', '=', $destination)
                      ->where('departure', '=' , $date)
                      ->where('hotel', '=', $hotel)
                     ->get();

当我提交所有输入时它会给出正确的结果,但是当任何输入丢失时它根本不起作用。

我以为我可以通过 If-else 解决它,但后来我意识到可能有 7 种情况(1- 参数存在,0 - 缺失: 对于前目的地(1)-日期(0)-酒店(0)= 100,总计: 111, 100, 010, 001, 110, 011, 101 - 我们不关心 000)。如果我们有 4 个输入,它将是 15、5 个参数 - 31 等等。

所以写这么多if-else会很乏味,那就意味着还有另一种方法。

如果只给出 1 或 2 个输入,我应该采取什么方法使其工作?

【问题讨论】:

  • 我从你的帖子中删除了一些借口,因为这不是一个糟糕的问题。 :)
  • 其实,你能做类似stackoverflow.com/a/14179817/576767的事情吗
  • 谢谢菲利克斯)也许你可以改变主题,这样对有同样问题的人会更有帮助?)(所以他们可以通过搜索更容易找到它,因为我找不到任何东西) .

标签: php mysql sql input


【解决方案1】:
$query = (new Tour)->newQuery();
if($request->has('destination')){
    $query->where('destination', '=', $request->get('destination'));
}
if($request->has('date')){
    $query->where('departure', '=', $request->get('date'));
}
if($request->has('hotel')){
    $query->where('hotel', '=', $request->get('hotel'));
}
$tours = $query->get();

【讨论】:

  • 谢谢,但是当我点击“提交”时,它给出了“不应静态调用非静态方法 Illuminate\Database\Eloquent\Model::newQuery()”,我应该更新什么?:)
  • 谢谢你,丹!如果不是你,我会花很长时间才能找到这个选项。
  • 好吧newQuery() 只是返回雄辩的查询构建器对象。如果您想了解它实际上是如何发生的,您可以在源代码中跟踪它。这里还有一篇文章(其中一篇),其中包含查询构建(过滤)的示例:m.dotdev.co/…
  • 谢谢,这篇文章很棒,我读到了最后,但只看懂了前半部分。将继续学习,希望有一天我能够完全理解它。
猜你喜欢
  • 2017-01-16
  • 2014-11-26
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多