mysql - 如何合并重复的代码,一个实例在 PHP 中,另一个实例在 Doctrine Query Builder 中?

标签 mysql symfony doctrine

我正在使用 Symfony2 和 Doctrine。

我有一个 Foo 对象,它是一个 Doctrine 实体。在此对象中,我需要一个名为 bar 的信息,我通过实体属性(即数据库字段)进行长时间计算获得该信息。

代码(简短版本)如下所示:

class Foo {

    public __construct() {
        computeBarValue();
    }

    private computeBarValue() {
        $this->bar = /*long computation from other attributes*/ ;
    }
}

但是现在,它发生了我还需要这个计算来过滤我向 Doctrine 发出的一些请求的结果。可以这样写:

class FooRepository extends EntityRepository {

    public function myFilteredQuery() {
        //...
        $queryBuilder = $this->_em->createQueryBuilder()
            ->select('a')
            ->from($this->_entityName, 'a')
            ->where( /*long computation from other fields*/ );
        //...
   }
}

问题是,由于计算代码又长又复杂,并且将来可能会发生变化,所以我不想重复它,其中一次出现在实体中,另一次出现在查询构建器定义中(如上所示)。我搜索过是否可以使用 Doctrine 添加“虚拟”计算列(这里我将添加一个 bar 列),但这似乎是不可能的。

有没有办法合并/分解所有这些?

最佳答案

实体只是数据持有者,任何有关查询的内容都应该进入存储库

我希望这会有所帮助。

关于mysql - 如何合并重复的代码,一个实例在 PHP 中,另一个实例在 Doctrine Query Builder 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383498/

相关文章:

javascript - X-editable:如何获取每一行的 id 以便我可以更新单个成员?

php - 如何根据帖子的日期和标题设置博客帖子的永久链接?

symfony - Doctrine Timestampable 扩展不持久

php - 尝试使用 SwiftMailer : Connection could not be established with host smtp. gmail.com [#0] 通过 Symfony 2 发送电子邮件

mysql - 具有 Doctrine 的symfony2无法连接到远程mysql数据库

mysql - 使用 VB.Net 将文本文件的内容导入 MySQL

mysql - 恩弗斯 : auto_increment (not PK) column not being audited

symfony - 使用 Sonata Admin 处理 Doctrine json_array 字段

forms - 无法确定属性 "id"的访问类型 - HandleRequest 失败,除非我公开实体 ID

symfony - 使用 Doctrine2 和 QueryBuilder 聚合 SUM