2014-10-29 3 views
0

Я использую пакет Sonata Admin. Когда я отправляю форму «Создать сущность», то создается ModelManagerException, если в форме есть несколько пустых полей.ModelManagerException: Не удалось создать объект

Я отследил это до 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 

Я попытался установить $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. 
} 
+0

Привет, вы можете добавить объявление о вашей организации «some_table» и особенно «название» поле в Resources/конфигурации/доктриной/..? – Aximem

+0

@sAr Я использую аннотации. Я добавил часть сущности для вас. – SiliconMind

ответ

0

у вас есть два варианта:

1- если вы хотите, чтобы имя поля может быть пустым, вам нужно изменить имя аннотации:

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

2- если вы хотите, чтобы поле имени было пустой строкой при создании нового экземпляра, вам просто нужно добавить prePersist в свой entityAdmin:

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

Я надеюсь, что это помогает :)

Смежные вопросы