2014-10-29 103 views
0

我使用Sonata Admin束。当我提交“创建实体”表单时,如果表单有一些空字段,则会抛出ModelManagerExceptionModelManagerException:无法创建对象

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

这是抛出异常的查询:

INSERT INTO some_table (name, username, email) VALUES (?, ?, ?)' with params [null, "my name", "[email protected]"] 

这些是例外:

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 

我试着在SomeEntity构造设置$this->name = '';明确,但它并没有帮助。查询仍然有null而不是''。我想在我的Admin类设置name''值覆盖getNewInstance(),但它并没有帮助 - 询问仍有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. 
} 
+0

嗨,你可以添加你的实体的声明在资源/配置/学说“some_table”,特别是场“名”/..? – Aximem 2014-10-31 08:16:10

+0

@sAr我正在使用注释。我已添加实体的一部分供您查看。 – SiliconMind 2014-10-31 11:26:02

回答

0

你有两个选择:

1,如果你想在名称字段可以为空,你需要编辑名称注记:

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

2 - 如果你想要的名称字段只是在创建新实例,一个空字符串,你只需要添加prePersist在entityAdmin:

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

我希望它能帮助:)