一对多和保存记录

时间:2011-06-10 11:37:45

标签: symfony1 symfony-1.4

我正在创建一个简单的CMS,我有一组模板,每个模板可以包含多个块。

所以我在模板和块之间有一对多的关系(1个模板可以有很多块)

因此,当我创建一个块时,它会下载模板,我可以将该块与使用sfDoctrineChoice小部件相关联。

在我的BlockForm.class.php

new sfWidgetFormDoctrineChoice(array('model' => 'Template', 'multiple'=>true, 'expanded'=>false))

我的架构是:

Template:
  actAs:
    Timestampable: ~
  columns:
    name:
      type: varchar(255)
    layout:
      type: text
  relations:
   Block:
     class: Block
     local: id
     foreign: template_id
     type: many
     foreignType: one
     alias: Block
     foreignAlias: Template
Block:  
  columns:  
    template_id:  { type: integer(8), notnull: true }  
    content:      { type: clob, notnull: true  }

当我尝试保存选项时出现问题。它给了我一个:

当我选择2个或更多模板或选择1个选项时,

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (分贝., CONSTRAINT {block_template_id_template_id {1}} {template_id {1}} {模板{1}} ID为FOREIGN KEY (

我的架构是否正确执行我想要做的事情?

由于

2 个答案:

答案 0 :(得分:0)

您必须添加外键约束。 onDelete和onUpdate。

Template:
  actAs:
    Timestampable: ~
  columns:
    name:
      type: varchar(255)
    layout:
      type: text

Block:  
  columns:  
    template_id:  { type: integer(8), notnull: true }  
    content:      { type: clob, notnull: true  }
  relations:
    Template:
      local: template_id
      foreign: id
      foreignAlias: Blocks

答案 1 :(得分:0)

  1. 首先按照您希望的方式构建数据库表。
  2. 将旧的schema.yml重命名为schema-20110610.yml
  3. 运行任务symfony doctrine:build-schema
  4. 查看您创建的新schema.yml文件。它可能会让你知道你做错了什么......