在 EntityType 字段中为 1:N Doctrine 关系选择的空值
Selected null-value for 1:N Doctrine relation in EntityType-field
我收到了涉及风险的事件。
我将 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
-Table 的数据如下:
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),
])
[...]
}
所以我的事故风险可以是 'not assessed'。那就是没有风险集的时候(=null
)。为了保持我的模型干净,我不希望有一个级别为 -1 且名称为 'not assessed'.
的行
我的表单按预期工作,缺少一个小细节:当 risk
为 null
时,我的单选按钮列表没有选择任何值。无论 'required'
-选项的值如何,都会发生这种情况。
对于空值,我得到:
( ) not assessed
( ) none
( ) very low
[...]
我想要:
(x) not assessed
( ) none
( ) very low
[...]
我想这种行为对于(未展开的)下拉字段来说很好。
有没有办法在数据值为 null
时选择我的单选按钮的 'placeholder'
/'empty_value'
选项?
对于您的 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
.
可行,但不是一个好的解决方案...如果您的第一个值是动态的,会发生什么情况?
我收到了涉及风险的事件。
我将 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
-Table 的数据如下:
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),
])
[...]
}
所以我的事故风险可以是 'not assessed'。那就是没有风险集的时候(=null
)。为了保持我的模型干净,我不希望有一个级别为 -1 且名称为 'not assessed'.
我的表单按预期工作,缺少一个小细节:当 risk
为 null
时,我的单选按钮列表没有选择任何值。无论 'required'
-选项的值如何,都会发生这种情况。
对于空值,我得到:
( ) not assessed
( ) none
( ) very low
[...]
我想要:
(x) not assessed
( ) none
( ) very low
[...]
我想这种行为对于(未展开的)下拉字段来说很好。
有没有办法在数据值为 null
时选择我的单选按钮的 'placeholder'
/'empty_value'
选项?
对于您的 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
.
可行,但不是一个好的解决方案...如果您的第一个值是动态的,会发生什么情况?