Pavel_Osipov
@Pavel_Osipov
Программист, в основном web

Текстовое поле не хочет быть null?

Доброго дня

Разбираюсь с Symfony2, вроде всё норм, но одна закавыка ни как не хочет дальше пускать меня. Прошу помощи.



Есть Entity Offer, у которой должны быть OfferDescription на всех языках сайта. Вот их описания:



class Offer<br>
{<br>
    /**<br>
     * @var integer $id<br>
     *<br>
     * @ORM\Column(name="id", type="integer", nullable=false)<br>
     * @ORM\Id<br>
     * @ORM\GeneratedValue(strategy="IDENTITY")<br>
     */<br>
    private $id;<br><br>
    /**<br>
     * @ORM\OneToMany(targetEntity="OfferDescr", mappedBy="offer", cascade={"all"}, orphanRemoval=true  )<br>
     */<br>
    protected $descriptions;<br><br>
    public function __construct()<br>
    {<br>
        $this->descriptions = new ArrayCollection();<br>
    }<br>
}<br><br>
class OfferDescr<br>
{<br>
    /**<br>
     * @var integer $id<br>
     *<br>
     * @ORM\Column(name="id", type="integer", nullable=false)<br>
     * @ORM\Id<br>
     * @ORM\GeneratedValue(strategy="IDENTITY")<br>
     */<br>
    private $id;<br><br>
    /**<br>
     * @var text $h1<br>
     *<br>
     * @ORM\Column(name="h1", type="text", nullable=true)<br>
     */<br>
    private $h1 = '';<br><br>
    /**<br>
     *<br>
     * @ORM\ManyToOne(targetEntity="Offer", inversedBy="descriptions")<br>
     * @ORM\JoinColumn(name="offer_id", referencedColumnName="id")<br>
     */<br>
    protected $offer;<br>
}<br><br>




Форма редактирования создаётся таким образом:

class OfferDescrEditForm extends AbstractType<br>
{<br>
    public function buildForm(FormBuilder $builder, array $options)<br>
    {<br>
        $builder->add('lng','hidden');<br>
        $builder->add('h1');<br>
    }<br>
}<br><br>
class OfferEditForm extends AbstractType<br>
{<br>
    public function buildForm(FormBuilder $builder, array $options)<br>
    {<br>
        $builder->add('descriptions', 'collection', array('type' => new OfferDescrEditForm()));<br>
    }<br>
}<br>




Twig шаблон для редактирования и добавления нового Offer`a один и тот же.

Метод получающий с неё данные:

if ( $id ) {<br>
//                Update offer action<br>
                $offer = $this->getOfferTotalInfoArr( $id );<br>
                $this->_updOfferAction( $offer );<br>
            }else{<br>
//                Add new ofer action<br>
                $offer = $this -> _initNewOffer();<br>
                $this->_updOfferAction( $offer );<br>
            }<br>


где,

private function _initNewOffer( ) {<br>
        $langs = $this->getLanguages();<br>
        $offer = new \PROJ\MainBundle\Entity\Offer();<br><br>
        foreach ( $langs as $lng_key => $lng_info ) {<br>
            $descr = new \PROJ\MainBundle\Entity\OfferDescr();<br>
            $descr->setLng( $lng_key );<br>
            $descr->setOffer( $offer );<br><br>
            $offer->addOfferDescr( $descr );<br>
        }<br>
        return $offer;<br>
    }<br>




И вот в итоге проблема, редактирование существующего Offer'a работает ОК, а при добавлении нового получаю ошибку:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'h1' cannot be null


в случае, если h1 для первого языка пусто, если в неё внести текст, то

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'h2' cannot be null
итак далее по пустым полям.



sudo php app/console cache:clear --env=dev ничего не меняет.

Не пойму, в чём причина. Где-то висит требование notnull для поля, но вот где?



Заранее благодарен за помощь
  • Вопрос задан
  • 7924 просмотра
Решения вопроса 1
@balloon
Ошибки бросает MySQL. Проверьте, что в таблице не стоит NOT NULL для этих полей.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
2king2
@2king2
Web software developer
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы