10

1.) 情况(简体)

我有两个实体:一个容器实体,它正好有 1 个内容实体。content_id 存储在容器实体中。

2.) 软删除内容实体

我实现了一个软删除内容实体的功能,所以我为内容实体添加了一个“已删除”属性。一切正常。

3.) 问题

现在,当我想创建一个新的容器实体时,自动生成的选项会显示所有内容实体——即使是那些我“标记为已删除”的内容实体(删除属性 = 1)。

4.) 问题

添加“过滤器”/“查询”以仅显示未标记为已删除的元素的正确位置在哪里?(删除!= 1)

5.) 我试过的

a.) view/twig 方法:我试图修改 {{ form_widget(form.contentId) }} 的渲染但没有成功

b.)控制器方法:我试图在创建表单的 newAction 中操作表单数据($form = $this->createCreateForm($entity))但没有成功

c.) type/buildForm 方法:我试图改变 buildForm()-method ...再次,没有成功

如果你能给我一个提示和/或一个简短的代码示例,我可以在其中挂钩以删除软删除的选择,那将是很好的。

非常感谢您!

4

1 回答 1

24

您正在寻找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')
        ;
    },
));

您也可以使用更通用的方法来过滤所有 select语句

于 2014-05-18T13:59:56.637 回答