我正在研究以下型号:
- 用户
- 类别
一个User
只能得到一个Category
。类别是"独立的"。所以我可以随时更新、创建和删除(好吧,也许可以级联)类别。
当我创建一个新的User
时,我想将一个Category
引用到User
。我该怎么做?我想避免不良行为。
User
实体:
/**
* User
*
* @ORMTable(name="user")
* @ORMEntity(repositoryClass="XXXRepositoryUserRepository")
*/
class User
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMManyToOne(targetEntity="Category", inversedBy="user")
* @ORMJoinColumn(name="category", referencedColumnName="id")
*/
private $category;
//...
}
Category
实体:
/**
* Category
*
* @ORMTable(name="category")
* @ORMEntity(repositoryClass="XXXRepositoryCategoryRepository")
*/
class Category
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMOneToMany(targetEntity="User", mappedBy="category")
*/
private $user;
//...
}
您编写的User
可以有一个Category
,但从您的描述来看,Category
可以由多个用户使用。如果这是真的,那么你的类别定义应该改变一点:
/**
* Category
*
* @ORMTable(name="category")
* @ORMEntity(repositoryClass="XXXRepositoryCategoryRepository")
*/
class Category
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Collection
* @ORMOneToMany(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();
现在,您的用户和类别都已正确设置。这只是一个基本的例子,将帮助你走上你的道路。