如何将现有条目引用到原则2中的新实体


How can I reference an existing entry to a new entity in Doctrine 2?

我正在研究以下型号:

  • 用户
  • 类别

一个User只能得到一个Category。类别是"独立的"。所以我可以随时更新、创建和删除(好吧,也许可以级联)类别。

当我创建一个新的User时,我想将一个Category引用到User。我该怎么做?我想避免不良行为。

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;
    //...
}

您编写的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。初始化构造函数中的集合

然后在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();

现在,您的用户和类别都已正确设置。这只是一个基本的例子,将帮助你走上你的道路。