我有一个包含ManyToMany的实体NewsVersion
:
class NewsVersion
{
...
/**
* @var NewsCategory[]|ArrayCollection
*
* @ORM\ManyToMany(
* targetEntity="AppBundle\Entity\NewsCategory",
* cascade={"persist"}
* )
* @ORM\JoinTable(name="news_version_categories")
*/
private $categories;
...
在我的存储库中,当我这样称呼时:
$qb = $this->createQueryBuilder('nv')
->select('nv')
->innerJoin('nv.categories', 'nvc')
->addSelect('nvc');
return $qb->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
我有:
但是当我这样称呼时:
$qb = $this->createQueryBuilder('nv')
->select('nv')
->innerJoin('nv.categories', 'nvc')
->addSelect('nvc.id');
我有:
为什么nvc.id
不会在id
数组中返回categories
?我希望只返回我的类别中的ID,但是categories
实体中的NewsVersion
数组(与第一个屏幕相同)
答案 0 :(得分:0)
您应该删除->addSelect('nvc.id')
并在select语句中添加category的id
$qb = $this->createQueryBuilder('nv')
->select('nv', 'nvc.id')
->innerJoin('nv.categories', 'nvc');
答案 1 :(得分:0)
您正在对数据进行两次单独的查询; $queryBuilder->addSelect()
与第一个一起创建一个新的。
在纯SQL中可能有意义。
/* ->select('nv') */
SELECT *
FROM `nv`
/* all of nv's fields are returned in this set */
/* ->addSelect('nvc.id') */
SELECT `id`
FROM `nvc`
/* only nvc.id is returned in this set */
为方便起见, Doctrine
将所有查询的结果集包装在一个数组中,但不会将它们组合在一起,因为它们并非来自同一个查询。
相关source:
// class QueryBuilder
public function addSelect($select = null)
{
// ...
return $this->add('select', new Expr\Select($selects), true);
}