教义。 QueryBuilder。如何为所有类别附加所有选项来查询结果

时间:2019-01-10 19:38:25

标签: symfony join doctrine

我不知道如何为单个菜肴附加选择蛋白阵列和类别。我只得到一个类别和一个选项作为查询结果。请帮助:)

我有菜可以使用选项将其连接到某些类别。

菜-比萨
选项类别-附件
选项-双层奶酪,萨拉米香肠,胡椒,洋葱

菜-沙拉
选项类别-酱
选项-橄榄,芥末酱,酸奶油

我还有一个可以与多个选项类别关联的盘子。

菜-特殊菜
选项类别-附件
选项-双层奶酪,香肠,胡椒,洋葱
选项类别-酱汁
选项-橄榄,芥末酱,酸奶油

示例数据库数据:


----
(id,name)
1,披萨
2,沙拉
3,特色菜

  | 1..n
  V

Dish_Options_Category_Assoc
---------------------------
(id,dish_id,category_id)
1,1,6
2、2、7
3,3,6
4、3、7

  | n..1
  V

Dish_Options_Category
---------------------
(身份证,姓名)
6,插件
7,酱汁

  | 1..n
  V

Dish_Options
------------
(id,category_id,名称)
11、6,双奶酪
12、6,萨拉米香肠
13、6,胡椒
14,6,洋葱
15、7,橄榄
16、7,芥末酱
17、7,酸奶

在dish_options_category_assoc存储库中,我正在寻找具有所有类别的所有菜肴,并且(我还希望将所有Options都连接起来)

    $q = $this->createQueryBuilder('d')
       ->where('d.dish = :did')
       ->join('d.categoryAssoc','ct')
       ->setParameters(array("did"=> $id)) 
       ->select('(d.dish) as dish_id','ct.id as cat_id','ct.name as cat_name')
       ->leftJoin('ct.options', 'o')
       ->addSelect('o.name as options')
       ->getQuery() 
       ->getResult();

    return $q;

但是我只有一种类别,只有一种选择。

我为一个“特殊菜肴”获得的数据附加了2个不同的选项类别:(上面的更正查询)

Array(7){
  [0] =>
  array(4){
    [“ dish_id”] =>“ 3”
    [“ cat_id”] =>“ 6”
    [“ cat_name”] =>“插件”
    [“ options”] =>“双层奶酪”
  }
  [1] =>
  array(4){
    [“ dish_id”] =>“ 3”
    [“ cat_id”] =>“ 6”
    [“ cat_name”] =>“插件”
    [“ options”] =>“香肠”
  }
  [2] =>
  array(4){
    [“ dish_id”] =>“ 3”
    [“ cat_id”] =>“ 6”
    [“ cat_name”] =>“插件”
    [“ options”] =>“辣椒”
  }
  [3] =>
  array(4){
    [“ dish_id”] =>“ 3”
    [“ cat_id”] =>“ 6”
    [“ cat_name”] =>“插件”
    [“ options”] =>“洋葱”
  }
  [4] =>
  array(4){
    [“ dish_id”] =>“ 3”
    [“ cat_id”] =>“ 7”
    [“ cat_name”] =>“调味”
    [“ options”] =>“橄榄”
  }
  [5] =>
  array(4){
    [“ dish_id”] =>“ 3”
    [“ cat_id”] =>“ 7”
    [“ cat_name”] =>“调味”
    [“ options”] =>“芥末酱”
  }
  [6] =>
  array(4){
    [“ dish_id”] =>“ 3”
    [“ cat_id”] =>“ 7”
    [“ cat_name”] =>“调味”
    [“ options”] =>“酸奶油”
  }
}

谁能告诉我如何将类别和选项附加为菜的数组?

1 个答案:

答案 0 :(得分:0)

解决方案-带有选项类别和选项的菜品信息:

$q = $this->createQueryBuilder('d')
    ->where('d.dish = :did')
    ->join('d.categoryAssoc','ct')
    ->setParameters(array("did"=> $id)) 
    ->leftJoin('ct.options', 'o')
    ->select('d','ct','o')
    ->getQuery() 
    ->getResult();

return $q;