Doctrine 2 - 一对一自动生成空行

时间:2012-04-06 14:53:40

标签: doctrine-orm

假设我有2个实体,用户和地址。每个用户都必须有一个地址,因此表之间存在一对一的关系。

现在我想生成一个用户,它应该自动创建一个没有数据的地址行,只标记它们的关系。

这在Entity或EntityRepository类中是否可行?或者是否有自动执行此操作的命令?

由于

3 个答案:

答案 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;
    }
}