【问题标题】:Symfony 2 - Using Doctrine's Collection in DQLSymfony 2 - 在 DQL 中使用 Doctrine 的集合
【发布时间】:2014-05-20 09:19:23
【问题描述】:

在我的 symfony 2 应用程序中,我的“部门”实体有一个存储库。在这个 repo 中,我有一个名为 getAvailableDepartements 的方法,我在 XXXType + Ajax 中使用它来获取符合表单中先前选择的所有部门:

public function getAvailableDepartements( $entites ) {

$qb = $this->createQueryBuilder('d');        
        $qb->where('d.entite IN :ents')
        ->setParameter('ents', $entites);                                     

        return $qb;
    }

我的问题是关于最佳实践,上面的代码不起作用,我想知道其他 symfony 开发人员将如何做我试图实现的目标:检索他们的“entite”字段在 $entites 中的所有部门参数中的集合...我在想:

  • foreach 实体中的实体,如果可以填充本地集合并返回包含所有部门的合并集合?
  • 或使用这些:

    public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) { parent::findBy($criteria, $orderBy, $limit, $offset);
    }

但看起来都很难看。

感谢您的帮助和建议!

编辑: 在 XXType 类中调用此方法:

    `$form->add('departements', 'entity', array( 
'class' => 'XXXperimetreBundle:Departement', 
'property' => 'sigle', 'multiple' => true, 
'expanded' => true, 
'query_builder' => function(DepartementRepository $dr) use ($entites) { return $er->getAvailableDepartements($entites); 
);`

【问题讨论】:

  • 向我们展示您的部门实体定义和关系“实体”
  • 这里是:/** * @ORM\ManyToOne(targetEntity="XXX\perimetreBundle\Entity\EntiteResponsable") * @ORM\JoinColumn(nullable=false) */ private $entite;
  • 和部门一:/** * Departement * * @ORM\Table(name="departements") * @ORM\Entity(repositoryClass="XXX\perimetreBundle\Entity\DepartementRepository") */ class Departement {
  • public function getAvailableDepartements( $entites ) { $depts = new \Doctrine\Common\Collections\Collection(); $dept = Array(); foreach ($entites->toArray() as $ent){ $dept = $this->findBy(Array('entite' => $ent)); foreach($dept as $d){ if(!$depts->contains($d)) $depts->add ($d); } } return $depts; } 我已经写了这个,它有效但没有得到我预期的结果。
  • 你试过用表达式吗?试试这个答案:stackoverflow.com/a/6319643

标签: php symfony doctrine-orm repository


【解决方案1】:

您确定要返回 $qb 吗?

尝试返回如下内容:

$query = $qb->getQuery();
$result = $query->getResult(); // or $result = $query->getArrayResult();

return $result;

这就是我的存储库方法返回的内容。

【讨论】:

  • 是的,我确定,因为我在 XXXType 表单的 POST_SUMBIT 事件中使用它,这是使用 repo 方法的回调闭包的以下部分。 $form->add('departements', 'entity', array( 'class' => 'XXXperimetreBundle:Departement', 'property' => 'sigle', 'multiple' => true, 'expanded' => true, 'query_builder' => function(DepartementRepository $dr) use ($entites) { return $er->getAvailableDepartements($entites); }));这很烦人,但我试图尊重 sep 的关注。
猜你喜欢
  • 2020-02-29
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多