2013-10-24 53 views
0

我使用Symfony和Doctrine,并尝试将数据插入数据库。在我的表messages中有一列user_id,它被设置为users.id的外键。 在我Message entitity有此setter为user_id使用Doctrine和Symfony插入到DB中 - 外键不会插入

/** 
* @ORM\Entity 
* @ORM\Table(name="Messages") 
*/ 
class Message { 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(name="user_id", type="integer") 
    */ 
    protected $user_id; 

    /** 
    * @ORM\Column(name="text", type="text") 
    */ 
    protected $text; 

    /** 
    * @ORM\ManyToOne(targetEntity="User") 
    * */ 
    protected $user; 

    public function setText($text) { 
     $this->text = $text; 
    } 

    public function getText() { 
     return $this->text; 
    } 

    public function setUserId($user_id) { 
     $this->user_id = $user_id; 
    } 

    public function getUser_id() { 
     return $this->user_id; 
    } 

    public function getUser() { 
     return $this->user; 
    } 
} 

但是它不会插入传递给我的二传手,但NULL变量。每个其他colums都填充了正确的数据,而插入只是这一个不是。我想这与外键有关(表users中有适当的数据)。控制器代码

部分:

if ($request->getMethod() == 'POST') { 
      $form->bind($request); 
      if ($form->isValid()) { 
       if ($isLogged) { 
        $user = $this->get('security.context')->getToken()->getUser(); 
        $message->setUserId($user->getId()); 
       } 
       $em->persist($message); 
       $em->flush(); 

当我改变二传手这个它的正确插入:

public function setUserId($user_id) { 
     $this->random_column_which_is_not_foreignkey = $user_id; 
    } 

有什么不对?谢谢

+0

请与代码是坚持实体 – skrilled

+0

我增加了一些更多的代码 – simPod

回答

1

您需要使用JoinColumn

试试这个:

/** 
* @ORM\Entity 
* @ORM\Table(name="Messages") 
*/ 
class Message { 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(name="text", type="text") 
    */ 
    protected $text; 

    /** 
    * @ORM\ManyToOne(targetEntity="User") 
    * @ORM\JoinColumn(name="user_id") 
    */ 
    protected $user; 

    public function setText($text) { 
     $this->text = $text; 
    } 

    public function getText() { 
     return $this->text; 
    } 

    public function setUser($user) { 
     $this->user = $user; 
    } 

    public function getUser() { 
     return $this->user; 
    } 
} 

而在你的控制器:

if ($request->getMethod() == 'POST') { 
    $form->bind($request); 
    if ($form->isValid()) { 
     if ($isLogged) { 
      $user = $this->get('security.context')->getToken()->getUser(); 
      $message->setUser($user); 
     } 
     $em->persist($message); 
     $em->flush(); 
     // ... 
+0

哇,谢谢了部分更新。有用! – simPod