[英]1 to 1..0 relationship in an embedded form with doctrine and symfony2
一個用戶可能只有一項,也可能沒有。 (1-1..0關系)
我正在嘗試通過symfony2來實現這一目標。
我已經完成了一對一的關系,這很簡單。 但是,如何指定要創建用戶時該項目可以為null的原則呢? (不要插入新行,而只將id_item留為null)
這就是我所擁有的:
user.orm.yml文件
oneToOne:
userItem:
targetEntity: SOA\AXBundle\Entity\Items
cascade: ["remove", "persist"]
joinColumn:
name: id_item
referencedColumnName: id
nullable: true
當然,我創建了ItemsTypeForm類,並在我的userstypeform類中添加了類型:
// UsersTypeForm Class
->add('userItem', new \SOA\AXBundle\Form\ItemsTypeForm())
控制器動作是這樣的,
public function addUserAction(Request $request) {
$user = new User();
$form = $this->createForm(new UseType(), $user);
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getEntityManager();
$em->persist($user);
$em->flush();
return $this->redirect($this->generateUrl('homepage'));
}
}
}
當我添加新用戶時,一切正常。 插入用戶以及項目。 但是,當我嘗試添加沒有項目的用戶時(用戶項目字段為空白),出現以下錯誤:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null
它正在嘗試插入具有空值的項目。
雖然我可以維持一對一的關系,但我想學習如何建立一對一的關系。
可以使用數據庫模式(您可以檢查是否直接在User表定義中查看數據庫,我很確定可以將null用作“ item_id”字段)。
問題是當您填寫表單並提交表單時,Symfony會創建Item對象,並將每個字段設置為null(因為表單中與item相關的每個字段均為空)。 您必須以某種方式告訴您,如果每個字段都為null,則框架不應保留Item對象。 我認為要實現這一目標,最好的方法是使用DataTransformer。
你可以在這里讀到它:
http://symfony.com/doc/2.0/cookbook/form/data_transformers.html
通常在Transformer :: reverseTransform中,您檢查每個字段是否為空,如果是,則返回null而不是Item對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.