2013-10-24 77 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