ユーザーとアドレスの2つのエンティティがあるとします。テーブル間に1対1の関係があるように、各ユーザーはアドレスを持っている必要があります。
ここで、ユーザーを生成したいのですが、データなしでアドレス行を自動的に作成し、それらの関係をマークする必要があります。
これは、エンティティまたはEntityRepositoryクラスで可能ですか?または、これを自動的に行うコマンドはありますか?
ありがとう
ユーザーとアドレスの2つのエンティティがあるとします。テーブル間に1対1の関係があるように、各ユーザーはアドレスを持っている必要があります。
ここで、ユーザーを生成したいのですが、データなしでアドレス行を自動的に作成し、それらの関係をマークする必要があります。
これは、エンティティまたはEntityRepositoryクラスで可能ですか?または、これを自動的に行うコマンドはありますか?
ありがとう
まず、あなたはそれを必要としません。NullObjectパターンを使用します。
次に、本当に必要な場合:
class User {
public function __construct() {
$this->setAddress(new Address);
}
}
そしてカスケード持続を設定します:
* @OneToOne(targetEntity="Address", cascade={"persist"})
リポジトリに関数を書き込みます:
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();
}
}
__construct() を使用して関係を作成できます
class User
{
/**
* @OneToOne(targetEntity="Address", cascade={"persist"})
*/
private $address;
public function __construct()
{
$address = new Address();
$address->setUser($this);
$this->address = $address;
}
}