2016-09-11 22 views
1

Symfony 3を学び始めましたが、Doctrineを使用してデータベース上のObjetをフラッシュしようとしたときにエラーが発生しました。'NotNullConstraintViolationException' Symfony 3のflush()エラー

私のメインコントローラでは、いくつかのプロパティのデフォルト値を設定するObjetをインスタンス化します。ここで

<?php 
namespace AppBundle\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use AppBundle\Entity\Objet; 
use AppBundle\Entity\Membre; 

class DefaultController extends Controller 
{ 
    /** 
    * @Route("/new", name="nouvelobjet") 
    */ 
    public function newAction(Request $request) 
    { 
     $objet = new Objet(); 
     $objet->setIdVendeur('2'); 
     $objet->setTitre('Article de test'); 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($objet); 
     $em->flush(); 
     return new Response ('<body>Id_vendeur:'.$objet->getIdVendeur().'</body>'); 
    } 
} 
?> 

は、私が使用クラッセ 'オブジェ' です:

<?php 
// src/AppBundle/Entity/Objet.php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
/** 
* @ORM\Entity 
* @ORM\Table(name="objet") 
*/ 

class Objet 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id_article; 

    /** 
    * @ORM\Column(type="integer") 
    */ 
    private $id_vendeur; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    private $titre; 

    /** 
    * @ORM\ManyToOne(targetEntity="Membre", inversedBy="objets") 
    * @ORM\JoinColumn(name="id_vendeur", referencedColumnName="id") 
    */ 
    private $membre; 

    /** 
    * Get idArticle 
    * 
    * @return integer 
    */ 
    public function getIdArticle() 
    { 
     return $this->id_article; 
    } 

    /** 
    * Set idVendeur 
    * 
    * @param integer $idVendeur 
    * 
    * @return Objet 
    */ 
    public function setIdVendeur($idVendeur) 
    { 
     $this->id_vendeur = $idVendeur; 

     return $this; 
    } 

    /** 
    * Get idVendeur 
    * 
    * @return integer 
    */ 
    public function getIdVendeur() 
    { 
     return $this->id_vendeur; 
    } 

    /** 
    * Set titre 
    * 
    * @param string $titre 
    * 
    * @return Objet 
    */ 
    public function setTitre($titre) 
    { 
     $this->titre = $titre; 

     return $this; 
    } 

    /** 
    * Get titre 
    * 
    * @return string 
    */ 
    public function getTitre() 
    { 
     return $this->titre; 
    } 


    /** 
    * Set membre 
    * 
    * @param \AppBundle\Entity\Membre $membre 
    * 
    * @return Objet 
    */ 
    public function setMembre(\AppBundle\Entity\Membre $membre = null) 
    { 
     $this->membre = $membre; 

     return $this; 
    } 

    /** 
    * Get membre 
    * 
    * @return \AppBundle\Entity\Membre 
    */ 
    public function getMembre() 
    { 
     return $this->membre; 
    } 
} 

、これはクラスのMembre '(わからない、それはそこに本当に便利です)です:

<?php 
// src/AppBundle/Entity/Membre.php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
/** 
* Membre 
* 
* @ORM\Table(name="membre") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\MembreRepository") 
*/ 
class Membre 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    private $name; 

    /** 
    * @ORM\OneToMany(targetEntity="Objet", mappedBy="membre") 
    */ 
    private $objets; 

    public function __construct() 
    { 
    $this->objets = new ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
    return $this->id; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Membre 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Add objet 
    * 
    * @param \AppBundle\Entity\Objet $objet 
    * 
    * @return Membre 
    */ 
    public function addObjet(\AppBundle\Entity\Objet $objet) 
    { 
     $this->objets[] = $objet; 

     return $this; 
    } 

    /** 
    * Remove objet 
    * 
    * @param \AppBundle\Entity\Objet $objet 
    */ 
    public function removeObjet(\AppBundle\Entity\Objet $objet) 
    { 
     $this->objets->removeElement($objet); 
    } 

    /** 
    * Get objets 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getObjets() 
    { 
     return $this->objets; 
    } 
} 

I私のコントローラのURLに行く、私はエラーをスロー:

例外が発生しました SQLSTATE [23000]:整合性制約違反:1048列 'id_vendeur'はnullにはできません。

(英語の場合は「0」を指定してください)

私は '$ em-> flush();'私は問題なくgetIdVendeur()の値を出力することができるので、null値ではありません。

私はこの問題に悩まされています...誰かがこれについて私を助けることができますか?前もって感謝します !

public function newAction(Request $request) 
    { 
     $objet = new Objet(); 
     $objet->setIdVendeur('2'); 
     $objet->setTitre('Article de test'); 
     $em = $this->getDoctrine()->getManager(); 

     // Retreive the object instance with id = 2 
     $membre = $em->find(Membre::class, 2); 
     // Set/specify the doctrine relations 
     $objet->setMembre($membre); 

     $em->persist($objet); 
     $em->flush(); 
     return new Response ('<body>Id_vendeur:'.$objet->getIdVendeur().'</body>'); 
    } 

おそらくあなたは、クラスObjetの属性id_vendeurを必要としません:。ID = 2を持つデータベースオブジェクトMembreに、あなたのコントローラで次の操作を行うことができますが存在すると仮定すると

+0

は、あなたは整数値を提供する必要があり、そうしてみてください。 – malcolm

+0

私はこれについて忘れて、あなたは正しい、ありがとう:) – Julien

答えて

0

`;` $ objet-> setIdVendeur(2):あなたは整数を持っていたよう

・ホープ、このヘルプ

+0

あなたの助けてくれてありがとう!今は期待どおりに動作します!私はこの瞬間の背後にある論理を理解していませんでしたが、私はそれに取り組んでいます。 – Julien