Как-то я не могу понять, как реализовать следующие отношения, используя синтаксис 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.