2015-09-06 82 views
3

真的是新來的symfony,來自yii。如何在symfony中插入與ManyToOne關係的user_id?

我無法將user_id插入到具有ManyToOne關係的另一個表中。 當我說我想插入的id表的實體,我用: $en->setUser($user_id);

的結果是: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null

但是當我做var_dump($user_id);有一個ID。 那麼如何插入user_id與多對一的關係?

[更新] TableUser實體

<?php 
namespace User\Bundle\RegisterBundle\Entity; 
use Symfony\Component\Validator\Constraints as Assert; 
use Doctrine\ORM\Mapping as ORM; 
/** 
* User 
* 
* @ORM\Table(name="user", indexes={@ORM\Index(name="user_id", columns={"user_id"})}) 
* @ORM\Entity 
*/ 

class User 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="user_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $userId; 

    public function getUserId() 
    { 
     return $this->userId; 
    } 
} 
?> 

TableSomeModel實體具有與USER_ID

<?php 
namespace \Entity; 
use Doctrine\ORM\Mapping as ORM; 
/** 
* SomeModel 
* 
* @ORM\Table(name="SomeModel", indexes={@ORM\Index(name="user_id", columns={"user_id"})}) 
* @ORM\Entity 
*/ 
class SomeModel 
{ 
    /** 
    * @var \User 
    * 
    * @ORM\ManyToOne(targetEntity="User") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") 
    * }) 
    */ 
    private $user; 

    /** 
    * Set user 
    * 
    * @param \Entity\User $user 
    * @return App 
    */ 
    public function setUser(\Entity\User $user) 
    { 
     return $this->user; 
    } 

    /** 
    * Get user 
    * 
    * @return \Entity\User 
    */ 
    public function getUser() 
    { 
     return $this->user; 
    } 
} 

多對一關係在控制器

$en = new SomeModel(); 
var_dump($user_id); //not null 
$en->setUser($user_id); //always null; 
+0

顯示兩個相關實體請 –

+0

能否請你分享其中聲明該關係的代碼(YML文件或註解? – Praveesh

回答

1

確保您已正確定義關係。如果您使用yml配置文件來定義實體,則 多對一關係配置如下。

manyToOne: 
user: 
    targetEntity: Your\NameSpace\Entity\User 
    joinColumn: 
    name: user_id 
    referencedColumnName: id 

如果您使用註釋來定義的關係,

/** 
* @ManyToOne(targetEntity="Your\NameSpace\Entity\User") 
* @JoinColumn(name="user_id", referencedColumnName="id") 
**/ 
private $user; 

而在你的實體SETUSER方法

/** 
    * Set user 
    * 
    * @param Blsk\CoreBundle\Entity\User $user 
    */ 
    public function setUser(Your\NameSpace\Entity\User $user = null) 
    { 
     $this->user = $user; 
    } 

編輯 在你的代碼,setUser方法不設置用戶但返回用戶。

+0

哦謝謝,我想我錯過了第一部分,這是在config.yml中(對於noob問題,很抱歉),它必須是每次都有多對一關係的配置嗎? – JamAndJammies

+0

由於您使用了註釋,所以這不是必需的。在發佈代碼之前,請放棄第一部分,您可以使用**註釋或yml文件來指定fy模型結構和關係。無需使用兩者。 – Praveesh

+0

好了!謝謝! – JamAndJammies

1
$en->setUser($User); // $User is object 

OR

$en->setUser($em->getReference('User\Bundle\RegisterBundle\Entity\User', $user_id)); // $user_id is integer, $em is EntityManager