我正在研究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识别这个功能的方法?
答案 0 :(得分:1)
Doctrine不会将SUBSTRING_INDEX识别为函数。
您可以导入Doctrine Extension进行识别,或者更改您的查询以获取此项sql LOWER(SUBSTRING(c.contact_name, LOCATE(' ', c.contact_name)-1))