在Symfony2表单中,将空文本字段设置为null

3
我有一个带有文本字段的表单,该字段映射到我的数据库中的非空字段(是遗留数据库,我无法更改此项)。
问题在于Symfony2始终将空文本字段设置为 NULL ,这会导致插入失败。
有没有办法告诉Symfony2不要将空文本字段设置为 NULL

将其设置在实体中,例如 * @ORM\Column(name="address", type="string", length=255, nullable=true) - hous
@hous:我想插入空字符串,而不是空值。 - Hpatoio
2个回答

4

首先在实体中默认设置空值

/**
 * @ORM\Column(name="example", type="string", length=255, nullable=false)
 */
private $example = '';

关于你的问题,不幸的是,你描述的是Symfony已知的问题/错误,所以你需要覆盖被设置到setter函数中的值:

public function setExample($example = null) {
    if (empty($example)) {
        $example = '';
    }
    $this->example = $example;
}

我已经尝试过了,但不起作用!Symfony将空字符串设置为null - Hpatoio
是的,这样确实可行。但我认为这只是一个hack /权宜之计。我希望Symfony不要将字段设置为“ null”。我已更改了您的示例。请接受它。 - Hpatoio
@Hpatoio 如果 $examplefalse 或其他空值,直接类型比较可能会有问题,否则 Symfony 可能会再次向数据库发送 null 值。我将在编辑中引用一个已知的错误。 - sjagr
我之前不知道那个bug。顺便说一下,我觉得你的代码没有解决这个问题。如果Symfony在某处调用$myEntity->setExample(null),我在数据库中仍然会得到null。而这正是我不想要的。你同意吗? - Hpatoio
@Hpatoio 请保留原样回答,这也有助于其他可能会看到您问题的读者。如果您从方法声明中删除= null部分,则在尝试使用 $entity->setExample() 而没有值时(这应该是设置空值的有效调用),您将会收到错误提示。 empty()is_null() 更好,因为它考虑了 falsenull0 这些值,这些值在存储到数据库时可能会被强制转换为 null - sjagr
FYI,这个Symfony问题在v3.1中已经解决,解决方法是:https://github.com/symfony/symfony/pull/18357 如果你还在使用之前的版本,请使用此修复程序:https://github.com/symfony/symfony/issues/5906#issuecomment-194201078 - userfuser

2
以下代码对我有效。我调整了表单定义。
    $builder->add('comment', TextareaType::class, [
        'empty_data'    => '',
        'required'      => false,
    ]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接