Laravel

时间:2018-05-25 03:46:16

标签: php laravel laravel-5 eloquent

我有一个相对简单的变量集,看起来效果很好,但我相信我输出它会产生问题。

目前我在控制器中使用以下内容:

    if(empty($_GET['direction'])){
        $direction = "'LIKE', '%'";
        } else if ($_GET['direction'] === 'Inbound') {
        $direction = "'>', 1";
        } else if ($_GET['direction'] === 'Outbound'){
        $direction = "'=', 1";
    }

现在,我已经在事实之后得到了$ direction,并且每次测试都显示它在$ _GET ['direction']的值下准确选择了正确的变量选项。

我的问题在于我是如何在那里输出它或在下面的部分中输入结果:

$manifests = DB::table('carrier_manifests')
        ->join('customers', 'carrier_manifests.carrierOrigin', '=', 'customers.id')
        ->select('carrier_manifests.*', 'customers.customer_name')  

        ->where([
                    ['manifestNumber', 'LIKE', '%' . $manifest . '%'],
                    ['originTerminal','LIKE','%' . $terminal . '%'],
                    ['carrierOrigin', $direction],
                ])
        ->orderBy('dateUnloaded', 'DESC')
        ->whereBetween('dateUnloaded', [$startDate, $endDate])
        ->limit(100)
        ->get();

现在,在我继续之前,我会说一切都在这里正常运行,并且有一段时间,添加carrierOrigin$direction时会出现问题。

例如,如果我在页面上将direction字段留空,则会将$ direction变量设置为等于“'LIKE','%'”。

不幸的是,在where子句中,这不会很好地发送或者什么,因为它不会返回任何结果,但作为测试我是否更改了这一行:

['carrierOrigin', $direction],

['carrierOrigin','LIKE','%'],

它成功返回所有结果。那么我应该采用不同的方式格式化输出或发送输出吗?

1 个答案:

答案 0 :(得分:1)

您将字符串作为第二个和第三个传递参数。在控制器中使用它:

if(empty($_GET['direction'])){
    $direction = ['LIKE', '%'];
    } else if ($_GET['direction'] === 'Inbound') {
    $direction = ['>', 1];
    } else if ($_GET['direction'] === 'Outbound'){
    $direction = ['=', 1];
}

然后查询:

$manifests = DB::table('carrier_manifests')
    ->join('customers', 'carrier_manifests.carrierOrigin', '=', 'customers.id')
    ->select('carrier_manifests.*', 'customers.customer_name')  

    ->where([
                ['manifestNumber', 'LIKE', '%' . $manifest . '%'],
                ['originTerminal','LIKE','%' . $terminal . '%'],
                ['carrierOrigin', $direction[0], $direction[1],
            ])
    ->orderBy('dateUnloaded', 'DESC')
    ->whereBetween('dateUnloaded', [$startDate, $endDate])
    ->limit(100)
    ->get();