1到1.0的关系,以嵌入的形式与条令和符号2



一个用户可能只有一个项目,也可能没有。(1-1/0关系)

我正试图用教条的象征来实现这一点。

我已经完成了一段1比1的关系,这很简单。但是,当我想创建一个用户时,该项目可以为空,我该如何指定该原则?(不插入新行,只保留id_item为空)

这就是我所拥有的:

user.org.myml文件

oneToOne:
  userItem:
    targetEntity: SOAAXBundleEntityItems
    cascade: ["remove", "persist"]
    joinColumn:
      name: id_item        
      referencedColumnName: id        
      nullable: true

当然,我创建了ItemsTypeForm类,并在我的usertypeform类中添加了类型:

    // UsersTypeForm Class
    ->add('userItem', new SOAAXBundleFormItemsTypeForm())

控制器动作是这样的,

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

它正在尝试插入具有null值的项。

虽然我可以接受1比1的关系,但我想学习如何建立1比1..0的关系。

数据库模式是正确的(您可以检查一下,如果您在User表定义中直接查看数据库,我很确定您可以对"item_id"字段使用null)。

问题是,当您填写并提交表单时,Symfony会创建Item对象,其中每个字段都设置为null(因为表单中与Item相关的每个字段都是空的)。您必须以某种方式告诉我们,若每个字段都为null,那个么框架就不应该持久化Item对象。在我看来,实现这一点的最佳方式是使用DataTransformer。

你可以在这里阅读:

http://symfony.com/doc/2.0/cookbook/form/data_transformers.html

通常在transformer::reverseTransform中,检查每个字段是否为空,如果为空,则返回null而不是Item对象。

相关内容

  • 没有找到相关文章

最新更新