Laravel 5.8 有条件地插入 sql 片段
Posted
技术标签:
【中文标题】Laravel 5.8 有条件地插入 sql 片段【英文标题】:Laravel 5.8 conditionally inserting sql snippet 【发布时间】:2019-10-09 15:00:19 【问题描述】:我正在尝试找出解决在 laravel 5.8 应用程序函数中插入条件 sql sn-p 的最佳方法。
我成功调用了一个带有请求参数$type
的函数。
$type
进入这个函数可以是 1,2 或 3(当 3 时我基本上希望 sql 查询在那个地方什么都没有执行),但目前它成功地从下面返回查询结果,好像什么都没有完全注入。我可以根据选择转储 $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
]);
【问题讨论】:
您是否尝试将其连接为字符串?$sql = "SELECT * FROM SCHEMA . TABLE T1 WHERE ACTIVE = 1" . $typeCondition;
我考虑过这种可能性,但问题是在本节之后我将有更多的查询以进行连接
@LucasArbex 我认为这会起作用,但一旦它起作用,我需要扩大一点
为什么不能继续连接呢?向我们展示一个您希望它如何扩展的示例...... :)
我刚刚编辑了一个例子
【参考方案1】:
您可以将查询视为string
并将其与您的变量连接。像这样:
$sql = "SELECT * FROM SCHEMA . TABLE T1 WHERE ACTIVE = 1" . $typeCondition . "INNER JOIN SCHEMA . TABLE2 T2 ON T1.ID = T2.ID";
【讨论】:
【参考方案2】:您可以使用查询生成器来获得干净的东西:
$query = Schema::select('*')->where('active', 1);
if ($type === 1)
$query->whereNotNull('parent_id');
elseif ($type === 2)
$query->whereNull('parent_id');
$data = $query->get();
【讨论】:
我想稍微扩展一下,我认为查询生成器不会有利于我从过去与 ODBC 的交互中看到的结果以上是关于Laravel 5.8 有条件地插入 sql 片段的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.8 SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误