PHP-Doctrine2: Items - Shops - ItemsAtShops - 如何使用Doctrine2方便地实现?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于PHP-Doctrine2: Items - Shops - ItemsAtShops - 如何使用Doctrine2方便地实现?的主要内容,如果未能解决你的问题,请参考以下文章

sh 启动_items

sh http://qiita.com/kumagi/items/23db1b7b564db27b53e6

sh bash命令错误视图。来自:http://qiita.com/takayuki206/items/f4d0dbb45e5ee2ee698e

sh GCCのsysrootオプションについて调べてみたref:http://qiita.com/maskedw/items/e73df32007934e75d9e3

python中items()和iteritems()的区别

Ucloud api signature 生成 (python3)