Symfony2 : How to filter the options of an entity-choice form field by a certain attribute?

标签 symfony doctrine-orm doctrine symfony-forms symfony-2.4

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/

相关文章:

mysql - Symfony 2.4 中重新生成 YML 映射问题

security - Symfony2 - 检查用户是否具有身份验证角色

php - 获取所有错误以及错误所连接的字段

php - 查找特定日期/任何年份的所有行

php - Symfony2,学说限制和偏移量没有按预期工作

authentication - 使用电子邮件而不是用户名的Symfony2身份验证/登录

php - 使用 JMS Serializer 时禁用 Doctrine 2 延迟加载?

php - Symfony2 无法导入资源

php - 错误 : Cannot use object of type Symfony\Component\HttpFoundation\Request as array upgrading to symfony 3. 0

php - 如何获取表单类型中实体的 ID?