PHP-Doctrine2: Items – Shops – ItemsAtShops – как удобно реализовать с помощью Doctrine2?

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

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

Думаю, мне нужно создать объект ItemsAtShops, связанный с ManyToOne -> Items and ManyToOne -> Shops, правильно? Но в этом случае … как мне удобно получить список предметов в конкретных Магазинах с их ценами и количествами в данных Магазинах? Итак, чтобы все это было удобно итеративно?

Мне нужно отобразить страницу со списком предметов и их Цены и количества в определенных магазинах. Существует шаблон для отображения пункта там (со всеми его подзадачами – цены и т. Д.). Таким образом, было бы наиболее удобно передать только один объект этому шаблону и повторить его, и это подобъекты (если есть).

    Я тоже борюсь с подобным сценарием в Доктрине. Rails испортили мне свою связь has_many :through => которая делает эту вещь тривиальной.

    Вы правы, вам нужны три объекта: магазины, предметы, предметыAtShops, используя двойные отношения 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 вы можете ItemsAtShop .

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