php - 使用几个选项过滤 php mysql

标签 php mysql sql input

我有一个假期旅游数据库,想同时按 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 代码在 Controller 中(“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 个输入,我应该采取什么方法让它工作?

最佳答案

$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();

关于php - 使用几个选项过滤 php mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43668035/

相关文章:

php - 在服务器上压缩/解压缩可能包含任何内容的未知上传文件是否危险?甚至病毒?

php - 来自两个表的SQL中的求和列

sql - PostgreSQL 用例 when result in where 子句

php - MYSQL存储过程2个表,2个select和1个update请求到同一张表

php - 一次有两个变量的 switch 语句

php - 邮件功能-更改SMTP中继

php - SQL查询计数问题

Java,MySQL - 线程异常 "main"java.sql.SQLException : Operation not allowed after ResultSet closed

php - 向某些用户显示管理员消息的最佳方式?

php - 修改从mysql中选择数据