2016-08-04 2 views
1

に追加されていない私は、登録フォームを行なったし、すべての問題がある細かい教義-Symfony3:varchar型の主キーは、私は私のユーザエンティティを設定していると、データベース

働いている電子メール(varchar型)の主キー(ID)として 私は、データベースにフォームを送信すると、電子メールの列が空である

Userエンティティ:

/** 
* Utilisateur 
* 
* @ORM\Table(name="utilisateur", indexes={@ORM\Index(name="FK_utilisateur_niveau", columns={"niveau"})}) 
* @ORM\Entity 
*/ 
class Utilisateur 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="pseudo", type="string", length=150, nullable=false) 
    */ 
    private $pseudo; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="password", type="string", length=250, nullable=false) 
    */ 
    private $password; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="email", type="string", length=150, nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="NONE") 
    */ 
    private $email; 

    /** 
    * @var \EncheresBundle\Entity\Role 
    * 
    * @ORM\ManyToOne(targetEntity="EncheresBundle\Entity\Role") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="niveau", referencedColumnName="niveau") 
    * }) 
    */ 
    private $niveau; 


    /** 
    * Set pseudo 
    * 
    * @param string $pseudo 
    * 
    * @return Utilisateur 
    */ 
    public function setPseudo($pseudo) 
    { 
     $this->pseudo = $pseudo; 

     return $this; 
    } 

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

    /** 
    * Set password 
    * 
    * @param string $password 
    * 
    * @return Utilisateur 
    */ 
    public function setPassword($password) 
    { 
     $this->password = $password; 

     return $this; 
    } 

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

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

    /** 
    * Set email 
    * 
    * @param string $email 
    * 
    * @return Utilisateur 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 

    /** 
    * Set niveau 
    * 
    * @param \EncheresBundle\Entity\Role $niveau 
    * 
    * @return Utilisateur 
    */ 
    public function setNiveau(\EncheresBundle\Entity\Role $niveau = null) 
    { 
     $this->niveau = $niveau; 

     return $this; 
    } 

    /** 
    * Get niveau 
    * 
    * @return \EncheresBundle\Entity\Role 
    */ 
    public function getNiveau() 
    { 
     return $this->niveau; 
    } 
} 

ここでは、インサートブロックです:

if ($form->isSubmitted() && $form->isValid()) { 

      $obj->setEmail($form['email']->getData()); 
      $obj->setPseudo($form['pseudo']->getData()); 
      $obj->setPassword($form['password']->getData()); 
      $obj->setNiveau($form['niveau']->getData()); 

      $em = $this->getDoctrine()->getManager(); 
      $em->persist($obj); 
      $em->flush(); 
      $this->addFlash('notice', 'Inscription effectuee !'); 

      return $this->redirectToRoute('login'); 
     } 

どこが間違っていましたか?

+0

完全なエンティティコードを表示できますか?これまであなたが投稿したものはすべてが大丈夫です。 –

+0

ok review i質問を編集する – Souf

+0

フォームの値をエンティティに再割り当てするのはなぜですか? '$ obj-> setEmail($フォーム[ 'メール'] - >のgetData());' 以前のフォームとモデルをバインドさならば、彼らは自動的に割り当てする必要があります。 '$フォーム=の$ this - > createForm(TaskType :: class、$ task); $ form-> handleRequest($ request); ' http://symfony.com/doc/current/forms.html#handling-form-submissions – CountZero

答えて

0

代わりに一意のIDを持つようにクラスを変更するのは簡単ですか? 私は簡単にオンラインで見ましたが、Doctrine Idは整数である必要があります(どのデータベースを使用していますか?)。

つまり、あなたのコードを変更し、そのようにIDを追加することができます。

class Utilisateur 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(name="util_id", type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $util_id; 
    ... 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="email", type="string", length=150, nullable=false) 
    */ 
    private $email; 
    ... 

私はそれが簡単な修正になるとうまくいくと思います。

+0

私は試しましたが、 – Souf

1

は長いので、検索した後、私は解決策 を見つけた私は、後の使用のエンティティを削除して再生成したファイルuser.orm.xmlに

<id name="email" type="string" column="email" length="150"> 
</id> 

<id name="email" type="string" column="email" length="150"> 
    <generator strategy="IDENTITY"/> 
</id> 

を編集した:)

関連する問題