- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我拼命地尝试在 Symfony2 中包含 LEVENSHTEIN 函数,但是,我仍然收到错误。规范 + 到目前为止我所做的:
通过 shell 执行测试了功能。工作得很好:
postgres=# SELECT levenshtein('test', 'text');
levenshtein
-------------
1
(1 row)
在DQL中添加函数:
<?php
namespace AppBundle\DQL;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\Parser;
use Doctrine\ORM\Query\SqlWalker;
class LevenshteinFunction extends FunctionNode {
public $firstStringExpression = null;
public $secondStringExpression = null;
public function getSql(SqlWalker $sqlWalker) {
return 'LEVENSHTEIN(' . $this->firstStringExpression->dispatch($sqlWalker) . ', ' . $this->secondStringExpression->dispatch($sqlWalker) . ')';
}
public function parse(Parser $parser) {
// levenshtein(str1, str2)
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->firstStringExpression = $parser->StringPrimary();
$parser->match(Lexer::T_COMMA);
$this->secondStringExpression = $parser->StringPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
配置.yml
orm:
auto_generate_proxy_classes: "%kernel.debug%"
auto_mapping: true
dql:
numeric_functions:
LEVENSHTEIN: AppBundle\DQL\LevenshteinFunction
问题:在我的存储库中执行以下代码块时,出现以下错误:
$this->getEntityManager()->createQuery("SELECT LEVENSHTEIN('test', 'text') FROM AppBundle:User");
return $query->getResult();
SQLSTATE[42883]: Undefined function: 7 ERROR: function levenshtein(unknown, unknown) does not exist
我错过了什么?为什么 DQL/Symfony/PDO/... 无法识别函数?非常感谢任何帮助!
最佳答案
错误来自 Postgres,似乎是可见性问题。
附加模块fuzzystrmatch
当然,必须安装。您显然已经这样做了,否则您的函数调用也不会在 psql 中工作。
如果它在 psql 中有效,但在您的应用程序中无效,则只剩下一些可能的解释。首先是显而易见的:
你们正在连接到同一个数据库? (相同的服务器,相同的端口,相同的数据库?)
您正在连接同一用户?可能不是 ...
如果连接到不同的用户(但在任何情况下),请检查您是否使用相同的搜索路径。在任一连接中运行并比较:
SHOW search_path;
详细信息 - 以及如何设置 search_path
:
请注意,扩展可以安装到您选择的任何架构中。默认是 search_path
中的第一个模式(安装时的“当前模式”,通常是 public
,但我不知道你的安装情况. 文档:
If not specified, and the extension's control file does not specify a schema either, the current default object creation schema is used.
运行这个来诊断一些事情:
SELECT e.extname AS extension, nsp.nspname AS schema
, r.rolname AS schema_owner, nsp.nspacl AS schema_acl
FROM pg_extension e
JOIN pg_namespace nsp ON nsp.oid = e.extnamespace
JOIN pg_roles r ON r.oid = nsp.nspowner
你会得到类似的东西:
extension | schema | schema_owner | schema_acl
---------------+------------+--------------+-------------------------------------
adminpack | pg_catalog | postgres | {postgres=UC/postgres,=U/postgres}
plpgsql | pg_catalog | postgres | {postgres=UC/postgres,=U/postgres}
fuzzystrmatch | public | postgres | {postgres=UC/postgres,=UC/postgres}
tablefunc | public | postgres | {postgres=UC/postgres,=UC/postgres}
...
如果 schema_acl
包含 =U/postgres
( U
for USAGE
),则 public
角色具有访问权限,即每个人。
相应地为您的连接设置 search_path
或(重新)安装到一个可见的模式,它应该可以工作。
理论上,所有者角色或 super 用户可能已经撤销了函数本身的EXECUTE
权限...
关于php - Symfony2 - 已注册但不存在的自定义 DQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33770962/
如何形成 DQL 查询以获取不包括文档 um 中创建的虚拟文档(同时添加对文件的引用)的文件列表。任何人都可以帮助我。 最佳答案 如 r_link_count is > 0 并且 object 是一个
所以,我有这个实体结构: User有一些Email s(同时多个); 每个Email属于Domain s (如果 email@example.com,那么我的数据库中有 Domain “example
我在 documentum 中发现了未记录的 DQL 命令(在 D6.5 上测试过) 执行计数 session 此查询输出中的“hot_list_size”、“warm_list_size”、“col
我们总是可以通过语法(select * from table_name)从表中找到相应的表属性,有没有办法反之亦然我的意思是有没有办法用属性名找到表名? 最佳答案 好吧,如果你所说的表是指对象,你可以
谁能告诉我如何仅使用“DQL”将文档从客户端机器导入到 documentum 存储库,下面是我正在使用的命令...... 我得到的错误是 [DM_SYSOBJECT_E_CANT_ACCESS_FIL
是否有机会从所有参数代替标记的学说查询生成器对象中获取 DQL 查询? 类(class) $query->getDQL()将返回查询但使用参数标记而不是实际值,即使它们已由 setParameter
试图将我的 sql 查询转换为 dql,似乎我做错了什么。 我需要基本的连接,像这样。 SELECT a.id, a.title, u.name FROM articles JOIN users ON
我使用一对一的关系作为实体的 id: Actor 实体 $metadata->mapOneToOne([ 'fieldName' => 'user', 'id' => true,
通常,如果我运行如下所示的 DQL 查询,它将返回实体对象列表: $d = $this->getDoctrine()->getRepository('xxxWebsiteBundle:Location
有人可以建议我使用 DQL 查询来查找 documentum 中存储库中的事件用户数吗? 下面是我正在使用的查询,但它没有给出正确的结果,有人可以提出建议吗? select count(user_na
如果我们提供相应文件的 object_id,任何人都可以使用 Documentum 查询语言提供解决方案,以访问从 documentum checkout 的文件的文件夹详细信息。谢谢………… 最佳答
如何从日期时间格式 (00-00-0000 00:00:00) 中提取不同的年份?我正在使用 Symfony 2 和 DQL。 在 SQL 中,它将是: SELECT DISTINCT extract
我有这个存储库功能来选择特定日期内与图像拟合相关的所有投票: public function getTopNImages(int $n) { $date = date_form
在我的实体“Item”中,有一个称为“products”(实体“Product”)的 ArrayCollection 属性,该属性可以为空 我需要在一次 DQL 调用中对“Item”实体数组进行所有产
我正在尝试从表 o 中 SLECT * ,其中供应商是我传递的内容。(这是在 Doctrine 存储库的上下文中)。然后我想运行一个子查询和 SELECT * FROM AppBundle:Price
我正在尝试更新一个查询中某些表中的一行。我已经完成了: $this->getDoctrine()->getManager() ->createQuery('
我将 Symfony 2 与 Doctrine 一起使用,并且我有两个实体加入了多对多关联。假设我有两个实体:User 和 Group,db 上的相关表是 users、groups 和 users_g
我正在尝试将这个我认为简单的 mysql 查询转换为 Doctrine dql,但是,我现在遇到了很大的困难...... SELECT (c.prix-aggregates.AVG) AS test
我在 MySQL 数据库中有 2 个表,我使用的是 doctrine 1.2 和 symfony 1.4.4 装机量和备用量 Installedbase: ib_id app_id location
我正在 Doctrine Documentation 中尝试这部分其中你可以: 手动编写DQL 对于您这些 SQL 爱好者,我们没有忘记您。您可以选择手动编写 DQL 查询并将它们解析为 Doctri
我是一名优秀的程序员,十分优秀!