DQL WHERE语句中的自定义映射自定义不一致

时间:2019-07-12 08:42:45

标签: symfony orm doctrine dql

在Symfony中,我有一个自定义的DB字段类型“ encrypted”,其定义为:

public function convertToPHPValueSQL($sqlExpr, $platform) {
    return 'aes_decrypt(' . $sqlExpr . ', "somekey", "someiv")';
}

以及相应的加密功能,它们很好用,entity:make尊重它们,您可以选择/插入很好,加密是完全透明的。

但是,当为记录搜索功能编写一些DQL以替换findBy时,我注意到在某些情况下,Doctrine / ORM /其中的任何一个都不能正确地构成WHERE子句。

如果我使用findBy(['forename'=>'bob'])为MySQL创建的where子句如下: 在哪里t0.forename = aes_encrypt(?,“ somekey”,“ someiv”)

然后,如果我使用: $ repo-> search($ terms); //搜索是我的存储库功能,目前已简化为测试此功能...

    select p.id, p.created, p.version, p.forename
    FROM App\Entity\mytable p
    WHERE p.forename = :t0

然后,SQL的where子句如下所示: 在哪里p0_.forename =?

没有来自自定义字段定义的加密语句。

所以,问题是-我是否缺少某些东西,或者这实际上是Doctrine / ORM / etc的工作方式,对某些事情采用一种方法,对其他事情采用一种方法?

我记得在某处看到WHERE子句可能不支持自定义字段类型,但是由于它在findBy中起作用,所以我真的没想到它不会在其他地方起作用。

如果是这种情况,那么它是在findBy()+ PHP端完成查询要完成的工作,这充其量只是一个恶臭。

0 个答案:

没有答案