2015-02-11 139 views
0

我试图处理搜索工具中的空格 - 专门用于处理名和姓,我可以让我的查询在命令行上工作,但是当我尝试将它们转换为modx/pdo语法,我没有得到结果。 [因为标准的不正确翻译]什么是CONCAT在modx xpdo语句中的正确语法

我所拥有的是:

$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%", 
     )); 

问题是与最后一跌: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

什么是正确的语法?

回答

0

高级条件通常需要被构造为一个字符串,而不是一个键=>值的配对。

以下是不完全忠实于原来的查询,但应该给予同样的结果:

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