我有三个Doctrine实体类,我们称之为Top,Middle和Bottom。
Top与中间人有一对多的关系,中间人与底部有一对多的关系。
Middle有一个属性“name”。这个“名称”不一定是唯一的。
现在我正在尝试显示“middles”列表。所有具有相同名称的中间应该被分组(在列表中只出现一次)。
在每个列表项下,应预览相关的底部(例如最多5个)
数据库内容:
Top Lorem: - Middle Foo - Bottom Dolor - Bottom Sit - Bottom Amet - Middle Bar - Bottom Elit Top Ipsum: - Middle Foo - Bottom Aenean - Bottom Comodo - Middle Baz - Bottom Aenean预期结果:
- Middle Foo - Bottom Dolor - Bottom Sit - Bottom Amet - Bottom Aenean - Middle Bar - Bottom Elit - Middle Baz - Bottom Aenean
以下是使用doctrine annotations描述的三个类:
/**
* Handelsunternehmen
*
* @ORM\Table(name="top")
* @ORM\Entity(repositoryClass="Bundle\Repository\TopRepository")
*/
class Top extends Client
{
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Bundle\Entity\Middle", mappedBy="top", cascade={"persist"})
*/
private $middles;
...
}
/**
* Middle
*
* @ORM\Table(name="middle")
* @ORM\Entity(repositoryClass="Bundle\Repository\MiddleRepository")
*/
class Vertriebsschiene
{
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=100)
*/
private $name;
/**
* @var Top
*
* @ORM\ManyToOne(targetEntity="Bundle\Entity\Top")
* @ORM\JoinColumn(name="top_id", referencedColumnName="id")
*/
private $top;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Bottom", mappedBy="middle")
*/
private $bottoms;
...
}
底部
/**
* Bottom
*
* @ORM\Table(name="bottom")
* @ORM\Entity(repositoryClass="Bundle\Repository\BottomRepository")
*/
class Bottom extends Lieferant
{
/**
* @var string
*
* @Gedmo\Slug(fields={"adressCity", "adressStreet"})
* @ORM\Column(length=128, unique=true)
*/
protected $slug;
/**
* @var Middle
*
* @ORM\ManyToOne(targetEntity="Bundle\Entity\Middle", inversedBy="bottoms")
* @ORM\JoinColumn(name="middle_id", referencedColumnName="id")
*/
private $middle;
...
}
目前,我通过以下方法检索中间对象列表:
public function findAllQuery(){
$qb = $this->createQueryBuilder('m')
->select('m as middle', 'b as bottom')
->addSelect('COUNT(b) as bottom_count')
->leftJoin('m.bottoms', 'b')
->groupBy('m.name');
return $qb->getQuery();
}
我遇到的问题是,bottom_count
显示了正确数量的相关底部,但当我访问middle.bottoms
时,我只得到一个结果。
任何人都可以提供任何帮助吗?我被困了一个星期。