我的“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;
}
答案 0 :(得分:0)
select(array('item as itemObj', 'parentItem as parentItemObj'))