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