ModelManagerException:无法创建对象

时间:2014-10-29 09:35:54

标签: symfony sonata-admin

我正在使用Sonata Admin捆绑。当我提交"创建实体"如果表单有一些空字段,则抛出ModelManagerException形式。

我已将此跟踪到首先抛出的PDOException。抛出异常是因为我的空字段获取空值,但我的表不允许空值。我不想要空字段,我想要空字符串。如何告诉Sonata Admin类为没有值的字段创建空字符串而不是空字符的新实体?

这是抛出异常的查询:

INSERT INTO some_table (name, username, email) VALUES (?, ?, ?)' with params [null, "my name", "test@mailinator.com"]

以下是例外情况:

ModelManagerException: Failed to create object: Acme\DemoBundle\Entity\SomeEntity
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null 

我尝试在$this->name = '';构造函数中明确设置SomeEntity,但它没有帮助。该查询仍然有null而不是''。我尝试在我的getNewInstance()课程上覆盖Admin以将name设置为''值,但它也没有帮助 - 查询仍然有null代替

奇怪的是,我可以在实体编辑表单上有空字段 - 实体更新正常,空字段正确保存到数据库。为什么会这样?

示例代码:

<?php
namespace Acme\DemoBundle\Entity

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 * @ORM\Table(name="some_table")
 */
class SomeEntity
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=255)
     *
     * We can't use Assert\NotNull()
     * because Admin bundle uses null values for empty fields!
     */
    protected $name;

    // Other fields and methods.
}

2 个答案:

答案 0 :(得分:0)

你有两个选择:

1-如果您希望name字段可以为null,则需要编辑名称注释:

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    protected $name;

2-如果您希望在创建新实例时名称字段只是一个空字符串,则只需在entityAdmin中添加prePersist:

    public function prePersist($object)
    {
        $object->setName('');
    }

我希望它有所帮助:)

答案 1 :(得分:0)

有一些与此相关的DBAL异常。在symfony异常页面上向下滚动,您将看到它。