Самореференция Doctrine не работает в Symfony 1.4 при обновлении или удалении - PullRequest
0 голосов
/ 24 октября 2010

Я пытаюсь создать модель для контентных страниц на моем сайте, и я дал ей собственную ссылку под названием «Связанная страница».Теперь, если я собираю свои модели и пытаюсь создать новую страницу в генераторе администратора, все работает отлично.Если я даю странице связанную страницу (или больше), она тоже работает нормально, но если я перехожу на другую страницу и пытаюсь редактировать ссылки, происходит сбой 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), он создает отношения дляэта страница (от страницы 2 до страницы 1 и страницы 3), и она удаляет старые отношения (это были страницы от 1 до страницы 2 и от страницы 1 до страницы 3), и последние отношения, которые у меня есть в таблице ассоциаций, - это страница от 1 до страница 1 (???) от страницы 2 доpage1 и page2 - page3.

Мои модели:

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.Нужно ли мне писать какой-то код, чтобы справиться с этим, или я делаю что-то не так?

Я проверил документацию доктрины: текст ссылки

и кажется, что всеOK.

Ответы [ 3 ]

0 голосов
/ 25 октября 2010

Хорошо, это была какая-то ошибка в Доктрине:

текст ссылки

Решение есть.

0 голосов
/ 11 апреля 2011

Решение edem не работает для меня.
Это мое решение.
Напишите это в lib / model / RelatedPage.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
0 голосов
/ 25 октября 2010

Вам необходимо добавить onDelete: CASCADE к отношению RelatedPages.

Вот ошибка Symfony: http://trac.symfony -project.org / ticket / 6273

...