Я нашел некоторую полезную информацию по этой проблеме, но не могу полностью обдумать решения.Поэтому я надеюсь, что кто-то может объяснить мне полезное решение, а не плагин / хак / обходной путь. Я очень стараюсь сделать «правильный» путь:
Так вот в чем моя проблема:
схема:
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
I 'я не уверен, что происходит только потому, что похоже, что он выполняет вставку, а не обновление для родителя, это так, как задумано?Мне просто нужно иметь возможность добавлять / редактировать электронную почту родителей (и все остальные данные, не перечисленные в этом примере для простоты) через форму студента
Как всегда, любые указания или комментарии приветствуются!Я только знакомлюсь с Symfony, и такие мелкие нюансы очень полезны для изучения, поэтому я могу двигаться вперед!
~ Mahalo Zjoia
UPDATE
Так что я здесь отчаянно и совершенно сбит с толку, я перепробовал все, что мог придумать и найти, и да, я могу устранить ошибку, но то, что неоднозначно в приведенной выше схеме, это то, что 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';
}
Это прекрасно работает, если я в родительской форме, но когда я вФорма для учащихся (которая включает в себя форму для родителей) не относится к электронной почте с родителем, она правильно создает сообщение электронной почты в email table
, но не вставляет идентификатор электронной почты в parent table
Я собираюсьбез ума от этого я просто не понимаю, пожалуйста, помогите!
ИДИОТ
ОТВЕТ
Оказывается, у меня были некоторыестарые модели, которые связывали таблицы, которые я думал модel rebuild удалил бы получается не так уж много, убрал это, и вся эта сумасшедшая странность ушла, все работает отлично!
Всегда что-то глупое, что упускается