私は2つのエンティティ、ユーザーと住所があるとします。各ユーザーはアドレスを持つ必要があるので、テーブル間には1対1の関係があります。Doctrine 2 - One-To-One自動的に空の行を生成する
私はユーザーを生成したいと思うし、データなしでアドレス行を自動的に作成し、関係をマークするだけです。
これはEntityまたはEntityRepositoryクラスで可能ですか?またはこれを自動的に行うコマンドがありますか?
おかげ
私は2つのエンティティ、ユーザーと住所があるとします。各ユーザーはアドレスを持つ必要があるので、テーブル間には1対1の関係があります。Doctrine 2 - One-To-One自動的に空の行を生成する
私はユーザーを生成したいと思うし、データなしでアドレス行を自動的に作成し、関係をマークするだけです。
これはEntityまたはEntityRepositoryクラスで可能ですか?またはこれを自動的に行うコマンドがありますか?
おかげ
まず、あなたはそれを必要としません。 Null Objectパターンを使用してください。
第二に、あなたが本当にそれを必要とする場合:
class User {
public function __construct() {
$this->setAddress(new Address);
}
}
そしてcascade persistを設定します。
* @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();
}
}
あなたは関係
class User
{
/**
* @OneToOne(targetEntity="Address", cascade={"persist"})
*/
private $address;
public function __construct()
{
$address = new Address();
$address->setUser($this);
$this->address = $address;
}
}
次のようなものは必要ありません: '$ address = new Address();と$アドレス - > setUser($ this); '? – bksunday
@aservedioこれは、関連付けが双方向か単方向かによって異なります。この記述から、単方向のように見えます。カスケード持続の例は双方向のものでしたが、それを修正しました。 – meze