在原则查询生成器查询中调用自定义 MySql 函数



我在 Doctrine Query Builders 查询字符串中使用自定义 MySQL 函数时遇到错误。
[语法错误] 第 0 行,第 32 行:错误:预期的已知函数,得到"ucfirst"
MySQL函数如下。

DELIMITER $$
DROP FUNCTION IF EXISTS `ucfirst`$$
CREATE FUNCTION `ucfirst`(str_value VARCHAR(5000)) RETURNS varchar(5000) CHARSET latin1 DETERMINISTIC
BEGIN
RETURN CONCAT(UCASE(LEFT(str_value, 1)),SUBSTRING(str_value, 2));  
END$$
DELIMITER;  

原则查询代码如下。

$qb = $this->em->createQueryBuilder();
$qb->select("ConcatWs(' ',ucfirst(p.firstName), ucfirst(p.lastName)) as user_name");
$qb->from('EntityProfile', 'p');
$data = $qb->getQuery()->getResult();
print_r($data);exit;  

我做错了什么的任何建议?

原则停留在DBAL之上 - 数据库访问的抽象层,其目的是隐藏特定数据库实现的细节。DQL,由 Doctrine 定义的查询语言,也是以一种保持足够通用的方式构建的。这意味着 Doctrine 的设计方式是提供统一的接口,因此没有提供用于某些特定于数据库的扩展的内置工具。

但是,Doctrine 足够灵活,允许您自行扩展 DQL AST 并实现所需的特定于数据库的扩展。特别是自定义 DQL 函数(需要映射到实际 SQL)可以通过实现自己的FunctionNode来创建,并将其作为附加功能节点注册到EntityManager配置中。在您的情况下,它将是 $em->getConfiguration()->addCustomStringFunction() .

有关自定义函数实现的示例,请参阅 Doctrine 文档。

相关内容

  • 没有找到相关文章

最新更新