Doctrine QueryBuilder getResult不返回嵌套数组

时间:2015-10-12 13:51:01

标签: symfony orm doctrine-orm doctrine doctrine-query

我的“Item”实体存储库类中有一个连接查询:

public function findByParentItem(parentItemCodes, excludedModules) {
    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->select('i', 'p')
        ->from('Bundle:ItemParent', 'p')
        ->join($this->getClassName(), 'i', Join::WITH, 'i.itemCode = p.itemCode')
        ->where(
            $qb->expr()->andX(
                $qb->expr()->in('p.parentItem', ':parentItem'),
                $qb->expr()->notIn('i.moduleId', ':excludedModules')
            )
        )
        ->setParameter('parentItem', $parentItemCodes)
        ->setParameter('excludedModules', $excludedModules);

    return $qb->getQuery()->getResult();
}

Item和ParentItem没有通过关联连接,因为它也可能指向另一个实体。

我希望结果是:

[
    0 => [
        0 => Item,
        1 => ParentItem
    ],
    1 => [
        0 => Item,
        1 => ParentItem
    ],
    ...
]

相反,我得到:

[
    0 => Item,
    1 => ParentItem,
    2 => Item,
    3 => ParentItem,
    ...
]

这是否因为没有实体关联而发生?

编辑:更改->from('Bundle:ParentItem', 'p', 'p.itemCode')会给我:

[
    'ItemCode1' => ParentItem,
    0 => Item,
    'ItemCode2' => ParentItem,
    1 => Item,
    ...
]

如果我这样做:

$qb->select('i', 'p.itemCode as itemCode')

我得到的更多符合我的要求:

[
    0 => [
        0 => ParentItem,
        'itemCode' => 'ItemCode1'
    ],
    1 => [
        0 => ParentItem,
        'itemCode' => 'ItemCode2'
    ],
    ...
]

编辑:我的实体:

/**
 * @ORM\Entity(repositoryClass="ItemRepository")
 * @ORM\Table(name="item")
 */
class Item {

    /**
     * @ORM\Column(name="item_code", type="string", length=50)
     * @ORM\Id
     */
    protected $itemCode;

    /**
     * @ORM\Column(name="module_id", type="string", length=10, nullable=true)
     */
    protected $moduleId;

    // .. other properties
}

/**
 * @ORM\Entity(repositoryClass="ItemParentRepository")
 * @ORM\Table(name="item_parent")
 */
class ItemParent {
    /**
     * @ORM\Column(name="item_code", type="string", length=50)
     * @ORM\Id
     */
    protected $itemCode;

    /**
     * @ORM\Column(name="parent_item", type="string", length=50)
     * @ORM\Id
     */
    protected $parentItem;
}

1 个答案:

答案 0 :(得分:0)

select(array('item as itemObj', 'parentItem as parentItemObj'))