Доктрина Самовещание не работает в Symfony 1.4 при обновлении или удалении
-
25-09-2019 - |
Вопрос
Я пытаюсь построить модель для страниц контента на моем сайте, и я дал ему собственную ссылку с именем «связанные страницы». Теперь, если я построю свои модели и попытаюсь создать новую страницу в генераторе администратора все работает нормально. Если я даю страницу связанную страницу (или больше), она тоже работает нормально, но если я перейду на другую страницу и попытаюсь редактировать сбои ссылок Symfony:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-2' for key 'PRIMARY'
Я проверил его в phpmyadmin и заметил, что в таблице ассоциации у меня есть 2 идентификатора (ID1 и ID2), и только первый идентификатор - это ссылка:
(Извините, я не мог вставить ссылку)
Я пытался дать поле «ID» в таблицу ассоциации, поэтому у меня было 3 поля (ID, ID1, ID2), и я видел, что когда я обновляю отношения на другой странице (Page2 - Page1 и Page2 - Page3), это Создание отношений для этой страницы (Page2 to Page1 и Page3), и она удаляет старые отношения (она была страница1 к странице2 и страницах к странице3) и окончательные отношения у меня в таблице ассоциации, является страницей Page 1 (?? ?) Page 2 на Page1 и Page2 к странице3.
Мои модели:
Page:
//...
relations:
RelatedPages:
class: Page
local: id1
foreign: id2
refClass: RelatedPage
equal: true
RelatedPage:
columns:
id1:
type: integer(4)
primary: true
unsigned: true
notnull: true
id2:
type: integer(4)
primary: true
unsigned: true
notnull: true
Я использую генератор администратора Symfony. Должен ли я написать какой-нибудь код, чтобы справиться с этим, или я делаю что-то не так?
Я проверил доктрину документацию:Ссылка текста
И кажется, что все в порядке.
Решение 2
Другие советы
Вам нужно добавить onDelete: CASCADE
к тому RelatedPages
связь.
Вот ошибка Symfony: http://trac.symfony-project.org/ticket/6273.
Решение Edem не работает для меня.
Это мое решение.
Напишите это в lib / model / forcentpage.class.php
class RelatedPage extends BaseRelatedPage
{
public function save(Doctrine_Connection $conn = null)
{
if ($this->isNew() !== true && $this->getId1() == $this->getId2()) {
return;
}//end if
return parent::save($conn);
}//end save()
}//end class