Doctrine:如何使用“LIKE REPLACE”创建查询?

时间:2010-06-01 13:29:32

标签: php sql doctrine

这个SQL子句工作正常:

SELECT * FROM `sf_guard_user` WHERE nombre_apellidos LIKE REPLACE('Mar Sanz',' ','%')

现在我正在尝试为Doctrine编写此查询。我试过这个:

$query->andWhere(sprintf('%s.%s LIKE REPLACE (?," ","%")',
                         $query->getRootAlias(), $fieldName),
                 'Mar Sanz'));

但是我收到了这个错误:

Warning: sprintf() [function.sprintf]: Too few arguments

有什么想法吗?

此致

哈维

1 个答案:

答案 0 :(得分:3)

'%'必须加倍('%%'),表示您发送到sprintfprintf的模式字符串内的文字%:

$query->andWhere(sprintf('%s.%s LIKE REPLACE (?," ","%%")',
                         $query->getRootAlias(), $fieldName),
                 'Mar Sanz'));

建议:为什么不在代码中运行字符串替换函数,然后再将其发送到数据库服务器?

$query->andWhere(
    sprintf(
        '%s.%s LIKE ?',
        $query->getRootAlias(),
        $fieldName
    ),
    preg_replace('/ /', '%', 'Mar Sanz')
);