MySQL/Doctrine:查找同名项的子项

MySQL/Doctrine:查找同名项的子项,mysql,symfony,doctrine-orm,Mysql,Symfony,Doctrine Orm,我有三个条令实体类,让我们称它们为Top、Middle和Bottom 顶部与中部之间存在一对多关系,中部与底部之间存在一对多关系 中间有一个属性“name”。此“名称”不需要是唯一的 现在我试图显示一个“中间人”列表。所有具有相同名称的中间层都应分组(在列表中仅出现一次) 在每个列表项下,应预览相关底部(例如最多5个) 例子 数据库内容: Top Lorem: - Middle Foo - Bottom Dolor - Bottom Sit

我有三个条令实体类,让我们称它们为Top、Middle和Bottom

顶部与中部之间存在一对多关系,中部与底部之间存在一对多关系

中间有一个属性“name”。此“名称”不需要是唯一的

现在我试图显示一个“中间人”列表。所有具有相同名称的中间层都应分组(在列表中仅出现一次)

在每个列表项下,应预览相关底部(例如最多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 中间的 底部 目前,我通过以下方法检索中间对象列表:

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\u count
显示了正确的相关底部数量,但当我访问
middle.bottoms
时,我只得到一个结果


有人能帮忙吗?我已经被难住了一周。

请添加您试图检索
Middle
对象列表的示例。我刚刚添加了函数
findAllQuery()
。这就是我检索中间对象的方式
/**
 * 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();
}