Какой правильный синтаксис для CONCAT в выражении modx xpdo
Я пытаюсь разобраться с пробелами в инструменте поиска - особенно для работы с именами и фамилиями, я могу заставить свои запросы работать в командной строке, но когда я пытаюсь преобразовать их в синтаксис modx/pdo, я не получить результаты. [потому что критерии не переведены правильно]
Что у меня есть:
$criteria->where(array(
'Entities.first_name:LIKE' => "%$searchQuery%",
'OR:Entities.cams:LIKE' => "%$searchQuery%",
'OR:Entities.last_name:LIKE' => "%$searchQuery%",
'OR:Entities.company:LIKE' => "%$searchQuery%",
'OR:CONCAT(`Entites`.`first_name`," ",`Entities`.`last_name`):LIKE' => "%$searchQuery%",
));
Проблема с последней строкой OR:CONCAT, если я дам запрос, мое предложение where выглядит так:
WHERE (
`Entities`.`first_name` LIKE '%first last%'
OR `Entities`.`cams` LIKE '%first last%'
OR `Entities`.`last_name` LIKE '%first last%'
OR `Entities`.`company` LIKE '%first last%'
OR `CONCAT(`Entites`.`first_name`," ",`Entities` LIKE '%first last%'
)
он добавляет обратный удар перед CONCAT и опускает.last_name
)
Какой правильный синтаксис?
1 ответ
Расширенные условия часто необходимо создавать в виде строки, а не пары ключ => значение.
Следующее не совсем верно для исходного запроса, но должно дать тот же результат:
$c->where(array(
'Entities.first_name:LIKE' => "%$searchQuery%",
'OR:Entities.cams:LIKE' => "%$searchQuery%",
'OR:Entities.last_name:LIKE' => "%$searchQuery%",
'OR:Entities.company:LIKE' => "%$searchQuery%",
));
$c->orCondition("CONCAT(Entities.first_name,' ',Entities.last_name) LIKE '%$searchQuery%'");
Или передайте весь набор условий OR в виде строки, чтобы точно воспроизвести ваш запрос:
$c->where("
Entities.first_name LIKE '%$searchQuery%'
OR Entities.cams LIKE '%$searchQuery%'
OR Entities.last_name LIKE '%$searchQuery%'
OR Entities.company LIKE '%$searchQuery%'
OR CONCAT(Entities.first_name,' ',Entities.last_name) LIKE '%$searchQuery%'
");