我在这个问题上找到了一些有用的信息,但不能完全围绕解决方案。所以我希望有人可以向我解释一个有用的解决方案而不是插件/黑客/解决方法我正在努力做到“正确”的方式:
所以这就是我的问题:
模式:
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
我生气这个我只是不明白,请帮忙!
IDIOT
ANSWER
原来我有一些连接表格的旧模型,我认为模型重建会删除不是很多,删除了,所有疯狂的怪异都消失了,事情很完美!
总是有些错过的东西
答案 0 :(得分:0)