【问题标题】:SQL Joins/Doctrine/Symfony2: Only getting one result from join when I expect multipleSQL Joins/Doctrine/Symfony2:当我期望多个连接时,只得到一个结果
【发布时间】:2016-05-16 21:28:24
【问题描述】:

所以,我得到了一些数据,这些数据旨在显示某种成分(成分表),并且它可以有不同的名称(成分名称表)。这是一些模拟数据:

ingredient
id | mock_name
-------------
1  | "The First Ingredient"
2  | "The second Ingredient"


ingredient_name
--------------
id | ingredient_id | name
1  | 2             | "Milk"
2  | 2             | "Mjolk"
3  | 1             | "Steak"

所以我希望用户插入一个成分 ID,然后输出成分数据(在本例中为“ingredient.mock_name”和成分别名(ingredient_name.name)。

我已经使用 Symfony/Doctrine 设置了所有实体、存储库等。这就是我现在拥有的:

$em = $this->getDoctrine()->getManager();

$query = $em->createQuery(
  'SELECT I, IGN.name
  FROM AppBundle:IngredientName IGN
  INNER JOIN AppBundle:Ingredient I WITH IGN.ingredientID=I.id
  WHERE IGN.ingredientID=:ingID'
)->setParameters(['ingID' => 2]);
$ingredients = $query->getResult();

这给了我这个结果:

   {  
      "0":{  
         "id":2,
         "mock_name":"The second Ingredient",
      },
      "name":"Mjolk"
   }

我希望得到的是这样的:

   {  
      "0":{  
         "id":2,
         "mock_name":"The second Ingredient",
      },
      "name":"Mjolk",
      "name":"Milk" <---- This value also
   }

SQL 连接从来都不是我的强项,用教条思考并不能让事情变得更容易。有人能指出我正确的方向吗?


我想要这样的东西,但如果可能的话,只能使用一条 SQL 语句:

$query = $em->createQuery(
  'SELECT IGN.name
  FROM AppBundle:IngredientName IGN
  INNER JOIN AppBundle:Ingredient I WITH IGN.ingredientID=I.id
  WHERE IGN.ingredientID=:ingID'
)->setParameters(['ingID' => $ingredientIdentifier]);
$ingredientsNames = $query->getResult();



$query = $em->createQuery(
  'SELECT I
  FROM AppBundle:IngredientName IGN
  INNER JOIN AppBundle:Ingredient I WITH IGN.ingredientID=I.id
  WHERE IGN.ingredientID=:ingID'
)->setParameters(['ingID' => $ingredientIdentifier]);
$ingredients = $query->getResult();


$ingredients = array_merge($ingredients, ['ingredientNames' => $ingredientsNames]);

返回:

{  
   "0":{  
      "id":2,
      "mock_name":"The second Ingredient"
   },
   "ingredientNames":[  
      {  
         "name":"Milk"
      },
      {  
         "name":"Mjolk"
      }
   ]
}

【问题讨论】:

    标签: php sql symfony join doctrine


    【解决方案1】:

    我对 Symfony/Doctrine 不是很熟悉,但是查看您的 json 结果,不可能将相同的键重复两次。

    我相信 "name": "Milk" 最初被检索到,但后来被 "name": "Mjolk" 覆盖。

    【讨论】:

      猜你喜欢
      • 2014-09-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2018-05-20
      • 2018-06-01
      • 2015-10-24
      相关资源
      最近更新 更多