2016-05-14 72 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(); 

现在你的用户和类别都设置正确。 这只是一个基本的例子,可以帮助你走上正轨。

相关问题