如何在Doctrine 2中引用现有条目到新实体?

时间:2016-05-14 14:44:43

标签: php symfony orm doctrine-orm doctrine

我正在研究以下模型:

  • 用户
  • 分类

一个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;

    //...
}

1 个答案:

答案 0 :(得分: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();

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