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 http://qiita.com/kumagi/items/23db1b7b564db27b53e6
sh bash命令错误视图。来自:http://qiita.com/takayuki206/items/f4d0dbb45e5ee2ee698e
sh GCCのsysrootオプションについて调べてみたref:http://qiita.com/maskedw/items/e73df32007934e75d9e3