gpt4 book ai didi

php - 查询构建器,一对多,其中许多为空

转载 作者:行者123 更新时间:2023-12-05 04:16:29 24 4
gpt4 key购买 nike

我有一个实体类别,这个类别与其自身具有递归关系,其中每个类别都可以是其他几个类别的父级。关系如下所示:

  /**
* @var parent
* @ORM\ManyToOne(targetEntity="Category")
* @ORM\JoinColumn(referencedColumnName="id", onDelete="CASCADE")
*/
private $parent;

/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")

*/
private $children;

我需要做一个查询生成器查询,选择所有类别,这些类别要么是 child (有 parent ),要么没有 parent 也没有 child 的类别(换句话说,除了有 child 的 parent 之外的所有类别)我似乎做不到。请帮忙。

最佳答案

您需要下一个 DQL 查询:

$query = 'SELECT c FROM AcmeBundle:Category c LEFT JOIN c.parent p LEFT JOIN c.children ch WHERE p IS NOT NULL OR (ch IS NULL AND p IS NULL)';

如果此查询需要 QueryBuilder 序列,您可以使用下一个代码:

$qb = $em->createQueryBuilder();
$query = $qb
->select('c')
->from('AcmeBundle:Category', 'c')
->leftJoin('c.parent', 'p')
->leftJoin('c.children', 'ch')
->where($qb->expr()->orX(
$qb->expr()->isNotNull('p'),
$qb->expr()->andX(
$qb->expr()->isNull('ch'),
$qb->expr()->isNull('p'),
)
))
->getQuery();

关于php - 查询构建器,一对多,其中许多为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com