Doctrine orm 原则2-一对一自动生成空行

Doctrine orm 原则2-一对一自动生成空行,doctrine-orm,Doctrine Orm,假设我有两个实体,用户和地址。每个用户都必须有一个地址,以便表之间存在一对一的关系 现在我想生成一个用户,它应该自动创建一个没有数据的地址行,并且只标记它们之间的关系 这在实体或EntityRepository类中是可能的吗?还是有一个命令可以自动执行此操作 感谢在存储库中编写函数: class User_Repository { public function createEmptyUserWithAddress() { $user = new User();

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

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

这在实体或EntityRepository类中是可能的吗?还是有一个命令可以自动执行此操作


感谢

在存储库中编写函数:

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_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 { 
    public function __construct() { 
        $this->setAddress(new Address);
    }
}
并设置:


首先,你不需要它。使用模式

第二,如果你真的需要它:

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


您可以使用_构造来创建关系

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

    public function __construct()
    {
        $address = new Address();
        $address->setUser($this);
        $this->address = $address;
    }
}

您可以使用_构造来创建关系

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

    public function __construct()
    {
        $address = new Address();
        $address->setUser($this);
        $this->address = $address;
    }
}

不要冲一次以上。最后一次刷新就足够刷新所有更改了。是的,我知道,谢谢。我已经写了Zend插件,它可以在postDispatch中刷新。不要多次刷新。最后一次刷新就足够刷新所有更改了。是的,我知道,谢谢。我已经编写了Zend插件,它可以在postDispatch中刷新;和$address->setUser$this@这取决于关联是双向的还是单向的。从描述上看,它看起来是单向的。虽然cascade persist的例子是双向的,但是已经修复了这个问题;和$address->setUser$this@这取决于关联是双向的还是单向的。从描述上看,它看起来是单向的。虽然cascade persist的示例是双向的,但修复了这个问题。