如何使用SQL语句PHPLaravel创建过滤?

如何使用SQL语句PHPLaravel创建过滤?,php,mysql,sql,database,laravel,Php,Mysql,Sql,Database,Laravel,我有一个名为Package的表。目前,我想实际筛选表。假设用户在变量中插入值,例如from=2/3/2020和to=10/3/2020。然后,它将在我的编码中计算,并得到天数的持续时间,结果noOfdays=8天。因此,从持续时间来看,它将确定在8天的持续时间内它属于哪些包 天数的计算: $today = Carbon::now(); $dt1 = Carbon::createFromFormat('d/m/Y',$departure); $dt

我有一个名为Package的表。目前,我想实际筛选表。假设用户在变量中插入值,例如from=2/3/2020和to=10/3/2020。然后,它将在我的编码中计算,并得到天数的持续时间,结果noOfdays=8天。因此,从持续时间来看,它将确定在8天的持续时间内它属于哪些包

天数的计算:

        $today = Carbon::now();

        $dt1 = Carbon::createFromFormat('d/m/Y',$departure);
        $dt2 = Carbon::createFromFormat('d/m/Y',$arrival);

        $noOfDays = $dt1->diffInDays($dt2);
计算没有错误,当dd($noOfDays)时,结果将为8天

SQL语句:

            $packages = Package::where([
                ['id', '=', $plan],
                ['from', '<=', $noOfDays, 'AND', 'to', '>=', $noOfDays],
            ])
            ->get();
$packages=Package::where([
['id','=',$plan],
['from','=',$noOfDays],
])
->get();
套餐表:


错误部分是,当我过滤时,它将得到包1和包2。它应该只得到包裹2。我认为它在SQL语句的某个地方出错了。以前有人遇到过这种情况吗?因为从逻辑上讲,我认为SQL部分已经是正确的了。但它为什么过滤并得到包1呢

更改第二个where语句。Where子句始终使用ADN UNELSS,除非您使用
或Where
或将其嵌套在函数中

['id', '=', $plan], 
['from', '<=', $noOfDays], 
['to', '>=', $noOfDays]
['id','=',$plan],
['from','=',$noOfDays]
作为
传递的第四个参数没有像预期的那样使用


输出中将包含哪些结果到package1。

您必须将两个where子句分开,才能得到您想要的结果

 $packages = Package::where([
     ['id', '=', $plan], 
     ['from', '<=', $noOfDays], 
     ['to', '>=', $noOfDays]
            ])
 ->get();
$packages=Package::where([
['id','=',$plan],
['from','=',$noOfDays]
])
->get();
为了更具可读性,如果您的代码是这样的,那就好了

 $packages = Package::where('id', $plan)
            ->where('from', '<=', $noOfDays)
            ->where('to', '>=', $noOfDays)
            ->get();
$packages=Package::where('id',$plan)
->其中('from','=',$noOfDays)
->get();