簡體   English   中英

具有教義和symfony2的嵌入形式的1到1..0關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM