【发布时间】: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