假设我有2个实体,用户和地址。每个用户都必须有一个地址,因此表之间存在一对一的关系。
现在我想生成一个用户,它应该自动创建一个没有数据的地址行,只标记它们的关系。
这在Entity或EntityRepository类中是否可行?或者是否有自动执行此操作的命令?
由于
答案 0 :(得分:2)
首先,你不需要它。使用Null Object模式。
其次,如果你真的需要它:
class User {
public function __construct() {
$this->setAddress(new Address);
}
}
并设置cascade persist:
* @OneToOne(targetEntity="Address", cascade={"persist"})
答案 1 :(得分:1)
在存储库中写入函数:
class User_Repository {
public function createEmptyUserWithAddress() {
$user = new User();
$entityManager->persist($user);
$entityManager->flush();
$address = new Address();
$entityManager->persist($address);
$entityManager->flush();
$user->setAddress($address);
$address->setUser($user);
$entityManager->flush();
}
}
或扩展用户(或地址)的构造函数:
class User {
public function __construct(Address $address) {
$this->setAddress($address);
}
}
class User_Repository {
public function createEmptyUserWithAddress() {
$address = new Address();
$entityManager->persist($address);
$entityManager->flush();
$user = new User($address);
$entityManager->persist($user);
$entityManager->flush();
}
}
答案 2 :(得分:1)
您可以使用__construct()创建关系
class User
{
/**
* @OneToOne(targetEntity="Address", cascade={"persist"})
*/
private $address;
public function __construct()
{
$address = new Address();
$address->setUser($this);
$this->address = $address;
}
}