有没有办法过滤表格集合中Symfony2收集的实体?
我的情况是这样的;
2个实体:父母和孩子。 子实体有一个属性'birthdate'。 两个表之间存在许多关系。
我有一个formType(parentType),它包含一组childType表单。
我可以加载parentType,并加载与父记录关联的每个childType。
我想过滤childType集合,以便包含生日日期大于日期的记录,并排除小于日期的记录。
Symfony2集合表单类型不允许使用'query_builder'来过滤builder-> add()中的选择。
有没有人遇到或解决过这个问题?
答案 0 :(得分:3)
我的解决方案是使用单独的setter / getter进行子实体收集,并使用Criteria过滤getter输出。表单字段名称应为“filteredChilds”。有点hacky但应该做的伎俩。
实体/ Parent.php
<?php
...
use Doctrine\Common\Collections\Criteria;
...
class Parent
{
...
/**
* @param Child $child
* @return $this
*/
public function addChild(Child $child)
{
$this->childs[] = $child;
return $this;
}
/**
* @param Child $child
*/
public function removeChild(Child $child)
{
$this->childs->removeElement($child);
}
/**
* @return ArrayCollection
*/
public function getChilds()
{
return $this->childs;
}
/**
* @param Child $child
* @return $this
*/
public function addFilteredChild(Child $child)
{
$this->addChild($child);
}
/**
* @param Child $child
*/
public function removeFilteredChild(Child $child)
{
$this->removeChild($child);
}
/**
* @return ArrayCollection
*/
public function getFilteredChilds()
{
$criteria = Criteria::create()
->where(Criteria::expr()->gt("birthday", new \DateTime()));
return $this->getChilds()->matching($criteria);
}
...
}