【问题标题】:PHP-Doctrine2: Items - Shops - ItemsAtShops - how to conveniently implement using Doctrine2?PHP-Doctrine2: Items - Shops - ItemsAtShops - 如何使用Doctrine2方便地实现?
【发布时间】:2010-07-06 10:57:26
【问题描述】:

不知何故我无法弄清楚如何实现以下关系 使用 Doctrine 2 语法:

我有物品和商店。每个项目都有不同的价格和不同的 每个商店的数量。所以,我有 Items 表、Shops 表和 ItemsAtShops 表。我如何反映 Doctrine 中的最后一个?

我想我需要创建 ItemsAtShops 实体,关联 ManyToOne -> 物品和多对一 -> 商店,对吧?但在这种情况下......我该怎么做 方便地获取特定商店的商品列表 给定商店的价格和数量?所以,所有这些都可以 方便迭代吗?

我需要呈现一个包含项目列表及其价格和 特定商店的数量。有一个显示项目的模板 那里(以及它的所有子属性 - 价格等)。因此,将一个对象传递给 这个模板并对其进行迭代,它是那里的子对象(如果有的话)。

【问题讨论】:

    标签: php orm doctrine entity-relationship


    【解决方案1】:

    我也在 Doctrine 中遇到这种情况。 Rails 用他们的has_many :through => 关系宠坏了我,这让这种事情变得微不足道。

    您是对的,您确实需要三个实体:使用双多对一关系的 Shops、Items、ItemsAtShops。

    我会假设 ItemsAtShop 看起来像:

    class ItemsAtShop 
    {        
       private $shop;
       private $items;
       private $quantity;
    }
    

    就查询而言,您需要调整连接:

    $queryBulder->select('ias')
                ->from(ItemsAtShop, 'ias')
                ->leftJoin('ias.Item', 'i')
                ->leftJoin('ias.Shop', 's')
                ->where('s.id = :shop_id')
                ->andWhere('i.price <= :my_price')
                ->orderBy('i.price', 'DESC');
    

    请记住,在使用 DQL 时,您通常会查询整个 Entity 对象,这些对象将自行获取它们的关系。这应该会产生一个ItemsAtShop 的集合,您可以对其进行迭代。

    我可能会花一些时间来找出正确的查询。我通常会从我知道有效的 SQL 查询开始,然后将其转换为 DQL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 2011-11-13
      • 2012-03-03
      • 2011-12-29
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      相关资源
      最近更新 更多