Laravel 5.8 有条件地插入 sql 片段

Laravel 5.8 conditionally inserting sql snippet

我正在尝试找出解决在 laravel 5.8 应用程序函数中插入条件 sql 片段的最佳方法。

我成功调用了带有请求参数的函数 $type

$type 进入此函数可以是 1,2 或 3(当 3 时我基本上希望 sql 查询在该位置执行任何内容),但目前它成功 returns 下面的查询结果就好像根本没有注入任何东西一样。我可以根据选择转储 $typeCondition 并正确切换,所以我知道 typeCondition 设置正确但看起来它实际上并没有将 typeCondition 插入查询并且我每次都得到相同的结果,所以它看起来像也许这是语法问题?

如果我 运行 下面的版本只是 :typeCondition 它会出错并说它不是有效的参数调用。

我应该在这里做什么?

public static function gatherReporting($type) {

    if($type ==1){
      $typeCondition = 'AND T1 . parent_id IS NOT NULL';
    }elseif($type ==2){
      $typeCondition = 'AND T1 . parent_id IS NULL';
    }else{
      $typeCondition = '';
    }

    $sql = "
        SELECT * 
        FROM   SCHEMA . TABLE T1
        WHERE ACTIVE = 1
        {:typeCondition}
        INNER JOIN SCHEMA . TABLE2 T2
        ON T1.ID = T2.ID
    ";
    return DB::connection('odbc')->select($sql,  [
                'typeCondition' => $typeCondition
            ]);
}

您可以使用查询生成器来清理一些东西:

$query = Schema::select('*')->where('active', 1);

if ($type === 1) {
    $query->whereNotNull('parent_id');
} elseif ($type === 2) {
    $query->whereNull('parent_id');
}

$data = $query->get();

您可以将查询视为 string 并将其与您的变量连接起来。像这样:

$sql = "SELECT * FROM SCHEMA . TABLE T1 WHERE ACTIVE = 1" . $typeCondition . "INNER JOIN SCHEMA . TABLE2 T2 ON T1.ID = T2.ID";