2

ユーザーとアドレスの2つのエンティティがあるとします。テーブル間に1対1の関係があるように、各ユーザーはアドレスを持っている必要があります。

ここで、ユーザーを生成したいのですが、データなしでアドレス行を自動的に作成し、それらの関係をマークする必要があります。

これは、エンティティまたはEntityRepositoryクラスで可能ですか?または、これを自動的に行うコマンドはありますか?

ありがとう

4

3 に答える 3

2

まず、あなたはそれを必要としません。NullObjectパターンを使用します。

次に、本当に必要な場合:

class User { 
    public function __construct() { 
        $this->setAddress(new Address);
    }
}

そしてカスケード持続を設定します:

 * @OneToOne(targetEntity="Address", cascade={"persist"})
于 2012-04-06T16:55:02.587 に答える
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();
    }
}
于 2012-04-06T15:27:02.597 に答える
1

__construct() を使用して関係を作成できます

class User
{
    /**
     * @OneToOne(targetEntity="Address", cascade={"persist"})
     */
    private $address;

    public function __construct()
    {
        $address = new Address();
        $address->setUser($this);
        $this->address = $address;
    }
}
于 2013-01-30T08:35:35.530 に答える