不知怎的,我无法弄清楚如何实现以下关系 使用Doctrine 2语法:
我有物品和商店。每个项目有不同的价格和不同 每个商店的数量。所以,我有物品表,商店表和 ItemsAtShops表。我如何反映Doctrine中的最后一个?
我想我需要创建ItemsAtShops实体,关联ManyToOne - > Items和ManyToOne - >商店,对吧?但在这种情况下......我该怎么做 方便地获取特定商店的商品清单 给定商店的价格和数量?所以,所有这些都可以 方便迭代?
我需要渲染一个包含项目列表及其价格的页面 特定商店的数量。有一个用于显示Item的模板 那里(所有它的子属性 - 价格等)。因此,将一个对象传递给最方便 这个模板并迭代它,它的子对象(如果有的话)。
答案 0 :(得分:2)
我也在学说中与这种场景斗争。 Rails用他们的has_many :through =>
关系破坏了我,这使得这种事情变得微不足道。
你是对的,你需要三个实体:Shops,Items,ItemsAtShops使用双ManyToOne关系。
我认为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。