【问题标题】:Using Views in Doctrine 2 with Symfony 2在 Symfony 2 中使用 Doctrine 2 中的视图
【发布时间】:2011-10-17 07:59:27
【问题描述】:

我有一个订单数据库(简化版): 订单:{id, shipping, discount, date} order_item: {id, order_id, name, amount, price}

如果我想获得全价 (SUM(item prices)+shipment-discount),我当然可以在我的 Order 类中添加一个方法来执行查询。另一方面,查看包含全价的订单会很方便。

是否可以将其集成到 Doctrine2 实体对象中?当我使用 Symfony/Doctrine 维护我的数据库布局时,甚至可以通过类中的注释生成这样的视图吗?

【问题讨论】:

    标签: database view doctrine-orm symfony


    【解决方案1】:

    你有 Doctrine Entity 和 EntityRepository。

    查询应该作为方法转到存储库类。 mysql-view 只是一个查询。存储库类返回一个或多个实体类。I.E 数据库表中的行。

    请提供一些代码和架构,以获得更好的答案。

    这可以转到订单实体:

    public function getOrderTotal() {
        $sum = 0.0;
        foreach ($this->getOrderItems() as $item) {
         //Process 
        }
        return $sum;
    }
    

    Doctrine2 不支持原生 MySQL 视图的处理和生成。

    【讨论】:

    • 对不起,“是的”什么?当我说“是否有可能将其集成到 Doctrine2 实体对象中?”我并不是要编写一个带有查询的方法,而是让 Doctrine 在数据库中生成一个视图(我也可以从外部使用)。你的回答似乎更“不”。
    • 再说一次,我 Doctrine2 没有很奇怪的编码标准,那么我不认为 Repository 类是正确的位置。从 OOP 的角度来看,我希望从实体本身而不是从某个“存储库”中检索实体的属性。据我了解,学说 2 的优点之一是您可以使用普通对象而不是从学说类继承的类。
    • 你误会了。您使用扩展 Doctrine Entity 的对象。优点是,例如,您没有像 mysql_fetch_assoc 这样的普通 php 数组为您提供的顶级工作。
    • 我不太明白。我不为我的实体扩展任何东西。文档还说你不这样做:doctrine-project.org/docs/orm/2.1/en/tutorials/… 此外,虽然“实体”类存在,但它是最终的。
    【解决方案2】:

    嗯 ¿ 可能吗?我不知道。我认为为这些实体做一个自定义存储库是最好的。在其方法中有查询的实体不干净。 这里有一个如何使用实体和自定义查询的示例 http://www.zalas.eu/doctrine2-and-symfony2

    【讨论】:

    • 嗨,我不认为这是正确的。 Howto 描述了查询实体实例的情况(在我的例子中,例如“getOrdersForItem($item)”)。我同意此类方法不属于实体对象。我想要做的是获得实体的自然属性,由于关系数据库的规则,它不作为列存在。在 OOM 中,这绝对是实体方法的情况。在学说1中,我认为现在的存储库被称为_Entity_Table。学说2可能有一个约定,但答案不是你的链接。
    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多