1.) 情况(简化)
我有两个实体:一个容器实体,它正好有 1 个内容实体。 content_id 存储在容器实体中。
2.) 软删除内容实体
我实现了一个软删除内容实体的功能,所以我向内容实体添加了一个“已删除”属性。一切正常。
3.) 问题
现在,当我想创建一个新的容器实体时,自动生成的选择会显示所有内容实体 - 甚至那些我“标记为已删除”(delete-attribute = 1)的内容实体。
4.) 问题
添加“过滤器”/“查询”以仅显示未标记为已删除的元素的正确位置在哪里? (删除!= 1)
5.) 我试过的
a.) View / Twig 方法:我试图修改 {{ form_widget(form.contentId) }} 的渲染但没有成功
b.) Controller 方法:我试图在创建表单的 newAction ($form = $this->createCreateForm($entity)) 中操作表单数据,但没有成功
c.) type/buildForm 方法:我试图改变 buildForm() 方法......再次,没有成功
如果您能给我一个提示和/或一个简短的代码示例,说明我可以在何处 Hook 操作以删除软删除的选项,那就太好了。
非常感谢您提前!
最佳答案
您正在寻找 query_builder
实体字段的选项。
您可以创建一个自定义查询来过滤其中的结果集。
例子:
$builder->add('users', 'entity', array(
'class' => 'AcmeHelloBundle:User',
'query_builder' => function(EntityRepository $repository) {
$qb = $repository->createQueryBuilder('u');
// the function returns a QueryBuilder object
return $qb
// find all users where 'deleted' is NOT '1'
->where($qb->expr()->neq('u.deleted', '?1'))
->setParameter('1', '1')
->orderBy('u.username', 'ASC')
;
},
));
您可以采用更通用的方法,使用 过滤所有选择语句。 doctrine filters , 也。
关于Symfony2 : How to filter the options of an entity-choice form field by a certain attribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23721670/