外键永远不会与嵌入关系保存

时间:2012-02-12 20:47:03

标签: symfony1 symfony-1.4 symfony-forms

我需要花费很多时间才能找到将外键保存在母表中的解决方案。 我正在尝试使用与symfony 1.4的嵌入关系(我也有ahDoctrineEasyEmbeddedRelationsPlugin)。

当我在这里阅读symfony文档时

http://www.symfony-project.org/more-with-symfony/1_4/en/06-Advanced-Forms

架构是:

Product:
  columns:
    name:           { type: string(255), notnull: true }
    price:          { type: decimal, notnull: true }
ProductPhoto:
  columns:
    product_id:     { type: integer }
    filename:       { type: string(255) }
    caption:        { type: string(255), notnull: true }
  relations:
    Product:
      alias:        Product
      foreignType:  many
      foreignAlias: Photos
      onDelete:     cascade

embedRelation看起来像:

// lib/form/doctrine/ProductForm.class.php
public function configure()
{
  // ...

  $this->embedRelation('Photos');
}

在我的情况下,我不能做其他事情,相反,产品有关系键,我有类似的东西:

Product:
  columns:
    name:           { type: string(255), notnull: true }
    price:          { type: decimal, notnull: true }
    photoid:        { type: integer }
    ownerid:        { type: integer }
  relations:
    Photo:
      local:        photoid
      foreign:      id
      type:         one
    Owner:
      local:        ownerid
      foreign:      id
      type:         one
Photo:
  columns:
    id :            { type: integer }
    filename:       { type: string(255) }
    caption:        { type: string(255), notnull: true }
owner:
  columns:
    id :            { type: integer }
    firstname:      { type: string(255) }
    lastname:        { type: string(255), notnull: true }

和embedRelation:

// lib/form/doctrine/ProductForm.class.php
public function configure()
{
  // ...
  $this->embedRelation('Photo');
  $this->embedRelation('Owner');
}

并且没有与要在表单中更新的名称或价格等产品相关的小部件,而只有来自照片和所有者表的信息。

当我保存新表单时,照片和所有者对象将保存在表格中,并且会使用序列创建ID。问题是产品永远不会更新。 photoid和ownerid仍然保持为null。 它就像嵌入式表单Photo和Owner在根表单后保存。

在这种情况下是否可以使用embedrelation? 那么当根表单保存在processForm中时,在Product表中保存外键的正确方法是什么? 什么是诀窍,请求帮助。

1 个答案:

答案 0 :(得分:0)

在PhotoForm.class.php中使用:

$this->useFields(array('filename', 'caption'));

阅读documentation