0

我有这个 M:N 设置和一些表。这是 MySQL Workbench 的 ERD 的屏幕截图:

在此处输入图像描述

proyectos我是为,centrosunidades使用任务生成的模块,doctrine:generate-admin但现在我遇到了一个问题:我需要unidadescentros表单中添加,那些应该将 n:m 关系保存在unidades_has_centros表中。我把这个放在CentrosForm

public function configure() {
    $this->widgetSchema['unidad'] = new sfWidgetFormDoctrineChoice(array('model' => 'Unidades', 'add_empty' => 'Seleccione una unidad', 'multiple' => true));
    $this->validatorSchema['unidad'] = new sfValidatorPass();
}

并显示控件,但是当我保存数据时,没有任何内容保存到unidades_has_centros表中。这是我的schema.yml(使用doctrine:generate-schema任务生成):

Centros:
  connection: doctrine
  tableName: centros
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    descripcion:
      type: string(250)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    ProyectosHasCentros:
      local: id
      foreign: centros_id
      type: many
    UnidadesHasCentros:
      local: id
      foreign: centros_id
      type: many
Cliente:
  connection: doctrine
  tableName: cliente
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    nombre:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    fecha_registro:
      type: timestamp(25)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    pais:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    Proyectos:
      local: id
      foreign: cliente
      type: many
Proyectos:
  connection: doctrine
  tableName: proyectos
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    nombre:
      type: string(150)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    pais:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    estado:
      type: integer(1)
      fixed: false
      unsigned: false
      primary: false
      default: '0'
      notnull: true
      autoincrement: false
    cliente:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
  relations:
    Cliente:
      local: cliente
      foreign: id
      type: one
    ProyectosHasCentros:
      local: id
      foreign: proyectos_id
      type: many
ProyectosHasCentros:
  connection: doctrine
  tableName: proyectos_has_centros
  columns:
    proyectos_has_centros_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    proyectos_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
    proyectos_cliente:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
    centros_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
  relations:
    Proyectos:
      local: proyectos_id
      foreign: id
      type: one
    Centros:
      local: centros_id
      foreign: id
      type: one
Unidades:
  connection: doctrine
  tableName: unidades
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    descripcion:
      type: string(250)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    UnidadesHasCentros:
      local: id
      foreign: unidades_id
      type: many
UnidadesHasCentros:
  connection: doctrine
  tableName: unidades_has_centros
  columns:
    unidades_has_centros_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    unidades_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
    centros_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
  relations:
    Unidades:
      local: unidades_id
      foreign: id
      type: one
    Centros:
      local: centros_id
      foreign: id
      type: one

有什么建议吗?

4

1 回答 1

0

您还应该覆盖表单的保存方法。就像是:

public function save(){
  $object = parent::save($con);

  UnidadesHasCentrosPeer::saveItems($this->values['unidad'], $object); 
}

在 saveItem 方法中,您应该定义创建 UnidadesHasCentros 对象的逻辑。

于 2013-11-12T18:16:22.213 回答