使用symfony中的条令将所有级联删除查询合并为单个查询
1使用symfony中的条令将所有级联删除查询合并为单个查询,symfony,doctrine-orm,Symfony,Doctrine Orm,1Country可以有0个或多个League,因此这是一个1-N关系,我们都知道这是一个1-N关系。我还设置了级联删除。我的问题是:这听起来可能有点含糊不清,但当我删除一个国家/地区时,有没有一种方法可以将所有删除查询(删除League表中相关记录的查询)合并为一个查询 我之所以这么问,是因为如果排行榜上有100条记录,那就意味着有100条删除查询。请看下面的图片,这是从Symfony档案 谢谢 课程 class Country { /** * @ORM\OneToMany(
Country
可以有0个或多个League
,因此这是一个1-N关系,我们都知道这是一个1-N关系。我还设置了级联删除。我的问题是:这听起来可能有点含糊不清,但当我删除一个国家/地区时,有没有一种方法可以将所有删除查询(删除League
表中相关记录的查询)合并为一个查询
我之所以这么问,是因为如果排行榜上有100条记录,那就意味着有100条删除查询。请看下面的图片,这是从Symfony档案
谢谢
课程
class Country
{
/**
* @ORM\OneToMany(
* targetEntity="League",
* mappedBy="country",
* cascade={"persist", "remove"},
* orphanRemoval=true
* )
*/
protected $league;
}
class League
{
/**
* @ORM\ManyToOne(
* targetEntity="Country",
* inversedBy="league"
* )
* @ORM\JoinColumn(
* name="country_id",
* referencedColumnName="id",
* onDelete="CASCADE",
* nullable=false
* )
*/
protected $country;
}
存储库
我正在阻止惰性负载对League
运行单独的查询,否则您将在上图中看到另一个查询
public function findOneById($id)
{
return
$this->createQueryBuilder('c')
->select('c, l')
->leftJoin('c.league', 'l')
->where('c.id = :id')
->setParameter('id', $id)
->getQuery()
->getSingleResult();
}
控制器
我通常不会在控制器中保留整个逻辑,但这只是为了演示
public function deleteAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$repo = $em->getRepository('FootballFrontendBundle:Country');
$country = $repo->findOneById($id);
if ($country instanceof Country) {
$em->remove($country);
$em->flush();
}
}
在这种情况下,您可能希望在存储库中有一个自定义查询来为您删除联赛