在EntityType-field中为1:N Doctrine关系选择null值

时间:2016-03-03 18:35:13

标签: php symfony doctrine-orm doctrine symfony-forms

我发现了一些涉及风险的事件。

我使用Symfony 2.6和Doctrine ORM实体与以下相当符号的实体:

class Incident
{
    private $id;
    private $name;
    private $date;
    /**
     * @ORM\ManyToOne(targetEntity="Risk")
     * @ORM\JoinColumn(name="risk_id")
     */
    private $risk;
}

class Risk
{
    private $id;
    private $level;
    private $name;
}

risks - 表的数据如下:

id  level   name
1   0       none
2   2       low
3   1       very low
4   5       moderate
5   10      high

对于这些事件我得到了这样的表单类型:

class IncidentType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
[...]
            ->add('risk', 'entity', [
                'class' => 'Model:Risk',
                'property' => 'name',
                'empty_data' => null,
                'empty_value' => 'not assessed',
                'expanded' => true,
                'required' => [true|false](see below),
            ])
[...]
}

因此,我的事件风险可能无法评估'那是没有风险集(= null)的时候。为了保持我的模型清洁,我不希望有一个级别为-1且名称为“未评估”的行。

我的表单按预期工作,缺少一个小细节:当risknull时,我的radiobuttons列表没有选择值。无论'required' - 选项的值如何,都会发生这种情况。

对于null值,我得到:

( ) not assessed
( ) none
( ) very low
[...]

我想要:

(x) not assessed
( ) none
( ) very low
[...]

我猜这种行为对于(未扩展的)下拉字段来说很好。

当数据值为'placeholder'时,是否可以选择我的单选按钮'empty_value' / null - 选项?

2 个答案:

答案 0 :(得分:1)

对于您应该执行的risk字段:

class IncidentType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
        [...]
            ->add('risk', 'entity', [
                'class' => 'Model:Risk',
                'property' => 'name',
                'empty_data' => null, 
                'empty_value' => 'not assessed', 
                'expanded' => true, 
                'required' => true
            ])
    [...]
    }
}

我刚检查过它并且它有效,当risk为空并且使用上面的代码时,会选择第一个值。注意我添加了'empty_data' => null, 'empty_value' => 'not assessed',并删除了placeholder

答案 1 :(得分:-1)

有效,但不是一个好的解决方案......如果您的第一个值是动态的,会发生什么?