【问题标题】:Doctrine Self Referencing is not working in Symfony 1.4 when updating or deleting更新或删除时,学说自我参考在 Symfony 1.4 中不起作用
【发布时间】:2011-04-29 19:41:15
【问题描述】:

我正在尝试为我网站上的内容页面构建一个模型,我给它一个名为“相关页面”的自我引用。现在,如果我构建我的模型并尝试在管理生成器中创建一个新页面,一切正常。如果我给页面一个相关页面(或更多)它也可以正常工作,但是如果我转到另一个页面并尝试编辑引用 symfony 崩溃:

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

我在 phpmyadmin 中检查了它,发现在关联表中我有 2 个 id(id1 和 id2),只有第一个 id 是链接:

(对不起,我无法粘贴链接)

我试图为关联表提供一个“id”字段,所以我有 3 个字段(id、id1、id2),当我更新另一个页面中的关系时(page2 到 page1 和 page2 到 page3 ),它正在为该页面创建关系(page2 到 page1 和 page3)并且它正在删除旧的关系(它是 page1 到 page2 和 page1 到 page3)并且我在关联表中的最终关系是 page1 到第 1 页(???) 第 2 页到第 1 页和第 2 页到第 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 管理生成器。我是否必须编写一些代码来处理这个问题,还是我做错了什么?

我检查了学说文档: link text

而且似乎一切正常。

【问题讨论】:

    标签: symfony1 doctrine symfony-1.4 doctrine-1.2


    【解决方案1】:

    您需要将onDelete: CASCADE 添加到RelatedPages 关系中。

    这是 Symfony 错误:http://trac.symfony-project.org/ticket/6273

    【讨论】:

    • 非常感谢您的回复,我今天会尝试并分享结果。 e'
    • 它不工作。顺便说一句,我检查了您提供的链接,它正在谈论 JobeetCategory 链接到 JobeetJob。就我而言,我将 Page 模型链接到自身。所以一个 Page 可以有很多相关的 Pages 页面......并且 SQL 错误是不同的,symfony 尝试插入重复的主键(RelatedPage 中的主键是复合的)。你有什么想法吗?
    【解决方案2】:

    好吧,这是某种 Doctrine 错误:

    link text

    解决方案就在那里。

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 2011-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多