Symfony 1.4 embedRelation完整性约束违规

时间:2010-12-22 20:39:32

标签: forms symfony1 doctrine

我在这个问题上找到了一些有用的信息,但不能完全围绕解决方案。所以我希望有人可以向我解释一个有用的解决方案而不是插件/黑客/解决方法我正在努力做到“正确”的方式:

所以这就是我的问题:

模式:

detect_relations: true    
Student:
  tableName: student
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    name:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      default: ''
      notnull: true
      autoincrement: false
    parents_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      default: ''
      notnull: true
      autoincrement: false
   relations:
     Parents:
      refClass: StudentParentLink
      local: student_id
      foreign: parents_id
      onDelete: CASCADE
Parents:
  tableName: parents
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    name:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      default: ''
      notnull: true
      autoincrement: false
    email_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      default: '0'
      notnull: true
      autoincrement: false
    relations:
      Student:
        refClass: StudetParentLink
        local: parents_id
        forign: student_id
        onDelete: CASCADE
Email:
  tableName: email
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    email:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      default: ''
      notnull: true
      autoincrement: false
StudentParentLink:
  tableName: student_parent_link
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    student_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      default: '0'
      notnull: true
      autoincrement: false
    parents_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      default: '0'
      notnull: true
      autoincrement: false

所以在英语中,我有一个有父母的学生,而且父母有一个电子邮件地址,很简单。

因此,在我的学生表格中,我有以下内容:

 //studentForm.class.php
 public function configure()
 {
     if($this->getObject()->isNew() || count($this->getObject()->Parents) == 0)
     {
         $this->getObject()->Parents[] = new Parents();
     }

     $parentsSubForm = new sfForm();
     $i = 1;
     foreach($this->getObject()->Parents as $parents)
     {
       $parentsForm = new ParentsForm($parents);
       $parentSubForm->embedForm("Parent $i",$parentsForm);
       $i++;
     }
  $this->embedForm('Parents',$parentSubForm)
 }

这看起来符合预期,适用于添加学生记录,但是在更新时我收到错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2' for key 1

我不确定发生了什么,只是看起来它正在为父进行插入而不更新,是否按设计进行?我只需要能够通过学生表格添加/编辑父母电子邮件(以及此示例中未列出的所有其他数据点,以简化)

一如既往,任何方向或意见都非常欢迎!我只是得到了Symfony的支持,这样的细微差别很难学,所以我可以继续前进!

~Mahalo Zjoia

更新

所以我在这里绝望而且完全糊涂了,我已经尝试了所有我能想到的东西并且发现并且是​​的我能够让错误消失但是在上面的架构中含糊不清的是EMAIL是多对多的其中一个如前所述的高级表格中的描述不起作用,您需要将它们联系起来,所以我有以下代码:

 if($this->getObject()->isNew() || count($this->getObject()->Email) < 1)
 {
    $email = new Email($this->getObject()->Email);
    $emailForm = new EmailForm($email);
    $this->embedForm('Parents Email', $emailForm);
    $useFields[] = 'Parents Email';
 }else{
    $this->embedRelation('Email');
    $this->widgetSchema['Email']->setLabel('Parents Email');
    $useFields[] = 'Email';
 }

如果我在父表格中,但是当我在学生表格(嵌入父母表格)时,它没有将电子邮件与父母联系起来,它在{{1}中正确创建了电子邮件但不会在email table

中插入email_id

我生气这个我只是不明白,请帮忙!

IDIOT

ANSWER

原来我有一些连接表格的旧模型,我认为模型重建会删除不是很多,删除了,所有疯狂的怪异都消失了,事情很完美!

总是有些错过的东西

1 个答案:

答案 0 :(得分:0)

您的问题非常常见,并在symfony网站上进行了描述。 Here是您需要的示例。

documentation也可能有用。 “特别是第11章 - 学说整合”。

此致 叶夫