我有兩個主義實體類:Vertriebsschiene
和Filiale
:主義不會自動加載加入使用GROUP BY關係
/**
* Vertriebsschiene
*
* @ORM\Table(name="vertriebsschiene", indexes={
* @ORM\Index(columns={"name"}, flags={"fulltext"})
* }))
* @ORM\Entity(repositoryClass="CRMBundle\Repository\VertriebsschieneRepository")
*/
class Vertriebsschiene
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=100)
*/
private $name;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Filiale", mappedBy="vertriebsschiene", fetch="EAGER")
*/
private $filialen;
...
}
/**
* Filiale
*
* @ORM\Table(name="filiale")
* @ORM\Entity(repositoryClass="CRMBundle\Repository\FilialeRepository")
*/
class Filiale extends Lieferant
{
/**
* @var Vertriebsschiene
*
* @ORM\ManyToOne(targetEntity="CRMBundle\Entity\Vertriebsschiene", inversedBy="filialen", fetch="EAGER")
*/
private $vertriebsschiene;
...
}
的Vertriebsschine
對象具有非潮頭名。現在我嘗試顯示Vertriebsschiene
對象列表及其Filiale
對象。
我findAllQuery方法是這樣的:
/**
* @param User $user
* @return \Doctrine\ORM\Query
*/
public function findAllQuery(User $user){
$qb = $this->createQueryBuilder('v')
->select('v as vertriebsschiene')
->addSelect('COUNT(f) as filial_num')
->leftJoin('v.filialen', 'f')
->groupBy('v.name');
$this->restrictAccess($user, $qb);
return $qb->getQuery();
}
/**
* @param User $user
* @param $qb
*/
protected function restrictAccess(User $user, QueryBuilder &$qb)
{
if ($user->hasRole(RoleVoter::AUSSENDIENST)) {
$qb ->leftJoin('f.vertreter', 'u')
->leftJoin('u.vertretungen', 'vx')
->andWhere($qb->expr()->orX(
'f.vertreter = :userid',
'f.vertreter IS NULL',
$qb->expr()->andX(
'vx.proxy = :userid',
$qb->expr()->between(':currentDate', 'vx.start', 'vx.end')
)
))
->setParameter('userid', $user->getId())
->setParameter('currentDate', new \DateTime(), \Doctrine\DBAL\Types\Type::DATETIME);
}
}
我的問題是,該Vertriebsschiene::$filiale
陣列集合不會自動加載,但加載每個Vertriebsschiene
造成許多DB連接。
這也有問題,當Vertriebsschiene::$filiale
被提取時,WHERE
語句被忽略。
COUNT(f)
返回正確數量的Filiale
對象。
我懷疑這是GROUP BY
聲明的問題。
不,這是行不通的。但問題是,當我加入GROUPBYç lause,只有一個'filiale'被選中。 – fsteinbauer