Доктрина: как создать запрос, используя «LIKE REPLACE»? - PullRequest
1 голос
/ 01 июня 2010

это предложение SQL работает нормально:

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

Теперь я пытаюсь написать этот запрос для Доктрины. Я пробовал это:

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

но я получаю эту ошибку:

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

Есть идеи?

Привет

* 1014 Javi *

1 Ответ

3 голосов
/ 01 июня 2010

Значение '%' должно быть удвоено ('%%'), чтобы обозначать буквальный% внутри строки шаблона, которую вы отправили sprintf или printf:

$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')
);
...