0

我有两个问题,需要一些帮助。

我有一个由第二个表的外键引用的表:

member_child:
    _attributes: { phpName: MemberChild }
    id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
    member_id: { type: INTEGER, size: '11', required: true, foreignTable: member, foreignReference: id }
    child_id: { type: INTEGER, size: '11', required: true, foreignTable: child, foreignReference: id }

和孩子:

child:
    _attributes: { phpName: Child }
    id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true, onDelete: cascade }
    username: { type: VARCHAR, size: '45', required: true, defaultValue: '' }
    display: { type: TINYINT, size: '1', required: true, defaultValue: '1' }
    ...etc

(显然这是推进)

现在,当我想使用表单创建子对象时,我需要做两件事:

  1. 提交时,提交会员ID
  2. 覆盖 doSave 函数,因此当创建孩子时,我还可以创建 member_child 对象

我怎样才能完成这些问题?

4

2 回答 2

1

我同意,您可以像 pankar 所说的那样使用 embedForm。您也可以像这样覆盖表单的保存方法:

$this->childForm = new ChildForm();
$this->childMemberForm = new ChildMemberForm();

//binding, checking if form was sent etc.

if ($this->childForm->isValid() && $this->childMemberForm->isValid())
{
  //save method should return saved object
  $childObject = $this->childForm->save(); 
  //therefore this id could be used by next object
  $this->childMemberForm->save(childObject->getId()); 
}

我希望这会帮助你!

于 2012-09-26T17:39:40.477 回答
0

你总是可以在你的父表单中使用内置的 Symfony 功能sfForm::embedForm来保存子表单,但我还没有找到一种正确让它工作的方法。

我前段时间看到的一篇帖子实际上确实为我提供了解决方案。看看它是否符合您的需求。当然它在 Doctrine 中,但我想它可以很容易地移植到 Propel 中

于 2012-09-24T19:19:05.973 回答