在Doctrine 2中无法识别SUBSTRING_INDEX

时间:2016-10-10 14:10:54

标签: mysql symfony doctrine-orm

我正在研究Symfony 3 CRM,我需要能够创建一个可以通过姓氏的第一个字母过滤的客户列表。问题是,我需要先拆分列数据才能找到姓氏 - 这是因为数据库与Sage同步,后者需要特定格式的数据,所以我无法更改它。

我发现了SUBSTRING_INDEX函数并在我的mySQL软件中尝试了它并且它运行良好 - 所以我尝试将它合并到DQL查询中,如下所示:

$query = $em->createQuery("SELECT u FROM AppBundle:Customer c WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(c.contact_name, ' ', 3), ' ', -1) LIKE :letter");
$query->setParameter('letter','%'.$letter.'%');

通过CRM的请求传递$letter的位置。但是,在尝试运行时,我从Symfony收到以下错误:

  

[语法错误]第0行,第41列:错误:预期的已知函数,得到   'SUBSTRING_INDEX'

我的猜测是Doctrine无法识别SUBSTRING_INDEX函数?有没有另外一种方法可以做我需要的,或者是一种允许Doctrine识别这个功能的方法?

1 个答案:

答案 0 :(得分:1)

Doctrine不会将SUBSTRING_INDEX识别为函数。

您可以导入Doctrine Extension进行识别,或者更改您的查询以获取此项sql LOWER(SUBSTRING(c.contact_name, LOCATE(' ', c.contact_name)-1))