我目前使用的是Yii2框架(特别是https://www.yiiframework.com/doc/api/2.0/yii-db-expression)
我遇到了一个问题,在创建多个表达式语句时无法动态设置参数。
$citiesArray = explode("Chicago", "New York", "Dallas");
foreach ($citiesArray as $index => $city) {
$expression = new Expression(
'JSON_CONTAINS(
field_location_addressLocation,
:city,
\'$.parts.city\'
)',
[':city' => json_encode($city)]
);
array_push($cityExpressions, $expression);
};
这里的问题是:city
在每次迭代时都被简单地替换,最终,SQL语句转换为只关心最后一个城市(在本例中为“达拉斯”)。
我曾尝试合并循环的索引来创建一个唯一的值,但没有这样的运气:
foreach ($citiesArray as $index => $city) {
$expression = new Expression(
'JSON_CONTAINS(
field_location_addressLocation,
\':city-$index\',
\'$.parts.city\'
)',
[':city-'.$index => json_encode($city)]
);
array_push($cityExpressions, $expression);
};
如果这是可能的?我相信这更像是一个mySQL(MariaDB)问题,而不是Yii问题,因为最终这些表达式被转换为SQL语句。
任何见解将不胜感激。
(我使用的是这里显示的param文档:https://www.yiiframework.com/doc/api/2.0/yii-db-expression#$params-detail)
2条答案
按热度按时间h6my8fg21#
你对替换参数的看法是正确的--参数名应该是唯一的。但是您错误地构建了表达式字符串-变量插值只对
"
内部的字符串起作用。如果使用'
,则$index
不会被视为$index
变量内部的值,而是作为文字字符串$index
。试试这个:bmvo0sr52#
在那里我找到了上述问题的简单解决方案