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";
我正在尝试找出解决在 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";