PHP-Doctrine2: Предметы - Магазины - ItemsAtShops - как удобно реализовать использование Doctrine2? - PullRequest
2 голосов
/ 06 июля 2010

Почему-то я не могу понять, как реализовать следующие отношения используя синтаксис Doctrine 2:

У меня есть предметы и магазины. Каждый предмет имеет разную цену и отличается количество в каждом магазине. Итак, у меня есть таблица предметов, магазины и ItemsAtShops таблица. Как мне отразить последнее в Учении?

Думаю, мне нужно создать сущность ItemsAtShops, которая связана с ManyToOne -> Предметы и ManyToOne -> Магазины, верно? Но в этом случае ... как мне удобно получить список предметов в конкретных магазинах с их цены и количество в данных магазинах? Так что все это может быть удобно повторяться?

Мне нужно отобразить страницу со списком предметов и их ценами и Количество в конкретных магазинах. Есть шаблон для отображения товара там (со всеми его подвойствами - цены и т. д.). Таким образом, было бы наиболее удобно передать только один объект этот шаблон и итерации его и его подобъектов (если таковые имеются) там.

1 Ответ

2 голосов
/ 09 июля 2010

Я тоже борюсь с подобным сценарием в Учении.Rails испортил мне отношения has_many :through =>, что делает подобные вещи тривиальными.

Вы правы, вам нужны три объекта: Магазины, Предметы, 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 вы 'обычно запрашивают целые объекты сущностей, которые самостоятельно выбирают их отношения.Это должно привести к коллекции ItemsAtShop, которую вы можете перебрать.

Я мог бы немного поиграть, чтобы выяснить правильный запрос.Я буду часто начинать с SQL-запроса, который, как я знаю, работает, и переводить его на DQL.

...