可以說我有2個實體,用戶和地址。每個用戶必須有一個地址,因此表格之間有一對一的關係。Doctrine 2 - 一對一自動生成空行
現在我想要生成一個用戶,它應該自動創建一個沒有數據的地址行,並且只是標記它們的關係。
這是可能的實體或EntityRepository類?還是有一個命令可以自動執行此操作?
感謝
可以說我有2個實體,用戶和地址。每個用戶必須有一個地址,因此表格之間有一對一的關係。Doctrine 2 - 一對一自動生成空行
現在我想要生成一個用戶,它應該自動創建一個沒有數據的地址行,並且只是標記它們的關係。
這是可能的實體或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();
}
}
可以使用__construct()創建一個關係
class User
{
/**
* @OneToOne(targetEntity="Address", cascade={"persist"})
*/
private $address;
public function __construct()
{
$address = new Address();
$address->setUser($this);
$this->address = $address;
}
}
你不需要像這樣的東西:'$ address = new Address();和$ address-> setUser($ this);'? – bksunday 2012-08-21 14:37:48
@aservedio它取決於關聯是雙向的還是單向的。從描述看起來像是單向的。雖然cascade的例子是雙向的,但修正了這個問題。 – meze 2012-08-21 18:03:10