один ко многим и сохранение записей - PullRequest
0 голосов
/ 10 июня 2011

Я создаю простую 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  }

Проблема возникает, когда я пытаюсь сохранить выбор. Это дает мне:

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens когда я выбираю 2 или более шаблонов или когда я выбираю 1 вариант:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails ( дб . блок , CONSTRAINT block_template_id_template_id FOREIGN KEY ( template_id ) REFERENCES шаблон ( ID ))

Правильна ли моя схема, чтобы делать то, что я ищу?

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 июня 2011
  1. Создайте таблицы базы данных так, как вам нужно.
  2. Переименуйте свой старый schema.yml в schema-20110610.yml
  3. Запустить задачу Symfony Doctrine: build-схема
  4. Посмотрите на новый файл schema.yml, который вы создали. Это может дать вам представление о том, что вы делаете неправильно ...
0 голосов
/ 10 июня 2011

Вы должны добавить ограничение внешнего ключа. 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
...