如何使用symfony admin generator,doctrine和M:N关系

时间:2013-11-10 15:41:46

标签: doctrine symfony1 symfony-1.4

我有一些表格的M:N设置。这是MySQL Workbench的ERD截图:

enter image description here

我使用proyectos任务生成了centrosunidadesdoctrine:generate-admin的模块,但现在我遇到了问题:我需要添加unidades centros形式,那些应该在unidades_has_centros表保存n:m关系。我把它放在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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您还应该覆盖表单的保存方法。类似的东西:

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

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

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