我在 SqlDataProvider 中有一个巨大的 SQL 查询。我正在使用这样的简单过滤(这样的做法是不好的吗?):
!empty($_GET['Search']['A']) ? $A = $_GET['Search']['A'] : $A = "%%";
$dataProvider = new SqlDataProvider([
'sql' => '
SELECT * FROM ...
WHERE
A LIKE :A',
'params' => [
':A' => $A,
],
它正在工作,但我想使用高级版本:
!empty($_GET['Search']['B']) ? $B = "AND B LIKE \'%" . $_GET['Search']['B'] . "%\'" : $B = "";
$dataProvider = new SqlDataProvider([
'sql' => '
SELECT * FROM ...
WHERE
A LIKE :A
:B',
'params' => [
':A' => $A,
':B' => $B,
],
但它不起作用,因为在最终 SQL 查询的开头和结尾总是有一个单引号,并且在值周围有一个双单引号:'AND B LIKE ''%something%'''
是否可以在不使完整查询有条件的情况下实现这样的事情?(因为我想像这样多次使用它,这会导致数千行长的命令集我想避免)提前谢谢你!