代码之家  ›  专栏  ›  技术社区  ›  Vladislav Rastrusny

php-doctrine2:items-shops-itemsatshops-如何使用doctrine2方便地实现?

  •  2
  • Vladislav Rastrusny  · 技术社区  · 14 年前

    不知怎么的,我不知道如何实现以下关系 使用条令2语法:

    我有东西和商店。每件商品都有不同的价格和不同的 每个车间的数量。所以,我有物品桌,商店桌和 项目商店表。我如何反映教义中最后一个?

    我想我需要创建itemsatshops实体,与manytoone相关-> 物品和许多商店,对吗?但在这种情况下…我该怎么办 方便地在特定的商店获取物品清单 给定商店的价格和数量?所以,所有这些都可以 方便迭代?

    我需要呈现一个包含项目及其价格列表的页面,以及 特定商店的数量。有用于显示项目的模板 那里(包括所有的次级资产——价格等)。因此,将一个对象传递到 这个模板并迭代它和它的子对象(如果有的话)。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Bryan M.    14 年前

    我也在理论上与这种情况作斗争。铁轨把我和他们的 has_many :through => 使这类事情变得微不足道的关系。

    你是对的,你确实需要三个实体:商店、物品、物品。商店使用双重的多人关系。

    我假设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。