为什么Doctrine不会在数组中返回我的值?

时间:2017-11-12 15:05:20

标签: symfony doctrine-orm doctrine symfony-3.3

我有一个包含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);

我有:

enter image description here

但是当我这样称呼时:

    $qb = $this->createQueryBuilder('nv')
        ->select('nv')
        ->innerJoin('nv.categories', 'nvc')
        ->addSelect('nvc.id');

我有:

enter image description here

为什么nvc.id不会在id数组中返回categories?我希望只返回我的类别中的ID,但是categories实体中的NewsVersion数组(与第一个屏幕相同)

2 个答案:

答案 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);
}