php - Doctrine 实体管理器通过空数组集合查找

标签 php symfony doctrine-orm doctrine query-builder

我有一个名为 Cycle 的实体,它与 CycleActeur 具有 OneToMany 关联(请参见下面的代码)。

我希望能够从我的 Controller 中使用一个简单的 doctrine findBy* 方法,获取数据库中所有没有关联 CycleActeur 对象的 Cycle 对象。

也就是这样说:

$manager = $this->getContainer()->get('doctrine.orm.entity_manager');
$cycleManager =  $manager->getRepository('ESI67Zen2Bundle:Cycle');
$cyclesWithNoCycleActeur = $cycleManager->findBy('acteurs', null);

有没有一种方法可以做到这一点而不必在 CycleRepository 中编写特定的方法?

从Cycle类代码中提取

class Cycle {
  /**
   * @ORM\OneToMany(
   *      targetEntity="CycleActeur", 
   *      mappedBy="cycle", 
   *      orphanRemoval=true)
   */
  private $acteurs;
}

从Cycle类代码中提取

class CycleActeur {
 /**
  * @var Cycle Le cycle concerné
  * 
  * @ORM\ManyToOne(targetEntity="Cycle", inversedBy="acteurs")
  * @ORM\JoinColumn(name="cycle_id", referencedColumnName="id")
  * 
  */
  private $cycle;
}

最佳答案

你的 Cycle 实体是关系的反面,它在数据库中的表没有 'acteurs' 列,所以你不能使用 findBy(['acteurs'=>null]) findByActeurs(空)。但无论如何你都可以做一些事情:

$manager = $this->getContainer()->get('doctrine.orm.entity_manager');
$cycleManager =  $manager->getRepository('ESI67Zen2Bundle:Cycle');
$allCycles = $cycleManager->findAll();

$cyclesWithNoCycleActeur = [];
foreach($allCycles as $cycle)
{
    if($cycle->getActeurs()->isEmpty())
    {
        $cyclesWithNoCycleActeur[] = $cycle;
    }
}

关于php - Doctrine 实体管理器通过空数组集合查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329953/

相关文章:

php - 如何从类外部更改类变量数组?

Symfony 表单主题内联扩展

forms - 在 Symfony 2 中创建表单网格

php - API 平台资源的多个 key 标识符

symfony - 驱动程序 : SQLSTATE[HY000] [1045] Access denied for user 'db_user' @'localhost' (using password: YES) 发生异常

orm - 使用 JMSSerialize 序列化遵循 SimplifiedYamlDriver 约定的 Doctrine2 实体

php - 无法将mysql数据检索到单个字符串中

php - 想要添加一列并最终显示结果?

php - session 不是真的被破坏了吗?

javascript - 编辑 CRUD 模板