如何添加新选项以选择实体

时间:2017-09-27 03:00:51

标签: php forms symfony

我正在处理包含大量发票的视图。

用户可以按“客户”,“日期”以及'参照'过滤它们。

发票与客户相关联,客户可以有“指示对象”。

所以在我的'referent'选择列表中,默认值为'All'不会过滤'referent',其余的是QueryBuilder获取的所有指示对象的列表。

现在,我需要帮助才能知道如何在选择列表中插入选项“无参考”以获取客户没有参考的所有发票。

这是我的'InvoiceSearchType'中的指示字段:

->add('referent', 'genemu_jqueryselect2_entity', array(
            'label' => 'Referent',
            'class' => 'GeocalUserBundle:User',
            'query_builder' => function (UserRepository $ur) {
                return $ur->getEmployesQueryBuilder();
            },
            'empty_value' => '',
            'configs' => array(
                'placeholder' => 'All',
                'width' => '100%',
                'allowClear' => true,
            ),
            'required' => false,
        ))

在这里,我的QueryBuilder:

public function getEmployesQueryBuilder()
{
    $queryBuilder = $this->createQueryBuilder('u')
                        ->leftJoin('u.groups', 'g')
                        ->where('u.enabled = 1')
                        ->andWhere('g.id NOT IN(1)')
                        ->orderBy('u.nom', 'ASC')
                     ;

    return $queryBuilder;
}

我只是显示那样的字段:

<td class="label">Chargé d'affaire</td>
<td colspan="2">{{ form_widget(form.referent) }}</td>

提前致谢! :)

1 个答案:

答案 0 :(得分:1)

<强> [解决]

首先,我添加了一个获取查询结果(数组)的方法,添加另一个引用并返回它:

public function getReferentWithNull()
{
    // Get the list of referents
    $referents = $this->doctrine->getRepository('GeocalUserBundle:User')->getEmployesQueryBuilder()->getQuery()->getResult();

    // Create a new instance
    $nobody = new User();
    $nobody->setName("No Referent");

    // Put it in the array result with the key -1
    $referents[-1] = $nobody;

    return $referents;
}

然后,我将表单字段类型修改为'choice'类型并调用我之前的函数:

->add('referent', 'genemu_jqueryselect2_choice', array(
            'label' => 'Referent',
            'choices' => $this->getReferentWithNull(),
            'empty_value' => '',
            'configs' => array(
                'placeholder' => 'All',
                'width' => '100%',
                'allowClear' => true,
            ),
            'required' => false,
        ))

最后,我的最后一个选项是'No Referent',键为-1。

希望它可以帮助某人:)