0

我在 Ubuntu 9.10 上使用带有 Propel ORM 的 Symfony 1.3.2。

我有一个用户配置文件表,其中有许多其他表链接到它(即 user_profile.id 是许多其他表中的 FK。

我的数据库架构看起来像这样:

user_profile:
  _attributes: { phpName: UserProfile }
  id: ~
  guard_id:  { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true }
  address:   { type: longvarchar, required: true }

vehicle_type:
  _attributes: { phpName: VehicleType }
  id: ~
  name: { type: varchar(32), required: true }


user_vehicle:
  _attributes: { phpName: UserVehicle }
  id: ~
  user_id:  { type: integer, foreignTable: user_profile, foreignReference: id, required: true }
  vehicle_type: { type: integer, foreignTable: vehicle_type, foreignReference: id, required: true }
  license_plate:     { type: varchar(16), required: true }


user_child:
  _attributes: { phpName: UserChild }
  id: ~
  user_id:  { type: integer, foreignTable: user_profile, foreignReference: id, required: true }
  gender:   { type: boolean, required: true }
  name:     { type: varchar(32), required: true }

我想在用户配置文件表单中嵌入链接到用户配置文件对象的其他对象,这样当我在用户配置文件表单上执行 CRUD 时,相关对象(例如 UserVehicle、UserJob 也是 CRUD 同时作为用户配置文件对象)。

我需要一个简单的片段来展示如何:

  1. 将各种相关对象(即 UserVehicle、UserChild)嵌入到 UserProfile 表单中
  2. 在进行操作时创建/更新/删除各种相关对象(请注意,一个用户可以拥有超过 0-N 辆汽车或分配给他们的儿童
4

2 回答 2

3

你读过文档吗?:

// lib/form/doctrine/ProductForm.class.php
public function configure()
{
  $subForm = new sfForm();
  for ($i = 0; $i < 2; $i++)
  {
    $productPhoto = new ProductPhoto();
    $productPhoto->Product = $this->getObject();

    $form = new ProductPhotoForm($productPhoto);

    $subForm->embedForm($i, $form);
  }
  $this->embedForm('newPhotos', $subForm);
}

对于创建/删除/更新部分,本文可能会提供一些帮助。

于 2010-02-25T17:17:30.647 回答
0

我从来没有找到适合我需要的官方方法。我开发了一种完全不同的方法。在我以前工作的公司中,我们在生产中使用了这种新方法,发现它更有弹性和简单。关键概念是“不要使用 Symfony 的 Form 类,你会发现嵌入表单可以是一项非常简单的任务”我希望这可以帮助你嵌入表单。

于 2011-07-03T17:45:03.723 回答