2016-05-14 60 views
2

我工作的以下型號:如何在Doctrine 2中引用現有條目到新實體?

  • 用戶
  • 類別

一個User只能得到一個Category。類別是「獨立的」。所以我可以隨時更新,創建和刪除(好吧,也許是級聯)類別。

當我創建新的User時,我想要參考CategoryUser。 我該怎麼做?我想避免不好的做法。

User實體:

/** 
* User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity(repositoryClass="XXX\Repository\UserRepository") 
*/ 
class User 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="user") 
    * @ORM\JoinColumn(name="category", referencedColumnName="id") 
    */ 
    private $category; 

    //... 
} 

Category實體:

/** 
* Category 
* 
* @ORM\Table(name="category") 
*  @ORM\Entity(repositoryClass="XXX\Repository\CategoryRepository") 
*/ 
class Category 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\OneToMany(targetEntity="User", mappedBy="category") 
    */ 
    private $user; 

    //... 
} 

回答

0

你寫一個User可以有一個Category,但它會從你的描述,一個Category可以由多個用戶使用,似乎。如果這是真的,那麼你的類定義應該修改一下:

/** 
* Category 
* 
* @ORM\Table(name="category") 
* @ORM\Entity(repositoryClass="XXX\Repository\CategoryRepository") 
*/ 
class Category 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var Collection 
    * @ORM\OneToMany(targetEntity="User", mappedBy="category") 
    */ 
    private $users; 

    public function __construct() 
    { 
     // It is important to initialize your collection 
     $this->users = new ArrayCollection(); 
    } 

    // add methods for adding/removing and getting users: 
    // addUser, removeUser, addUsers, removeUsers and getUsers method 
} 

瞭解更多關於在學說文檔章節27.7. Initialize collections in the constructor初始化集合。

然後在您的User類中,您將需要設置和獲取類別的方法。

public function setCategory(Category $category) 
{ 
    $category->addUser($user); 
    $this->category = $category; 
} 

public function getCategory() 
{ 
    return $this->category; 
} 

現在你可以這樣做:

$category = // get the category you want to set from entity manager 
$user = new User(); 
$user->setCategory($category); 
$entityManager->persist($user); 
$entityManager->flush(); 

現在你的用戶和類別都設置正確。 這只是一個基本的例子,可以幫助你走上正軌。

相關問題