لا تعمل الإشارة الذاتية العقيدة في Symfony 1.4 عند التحديث أو الحذف

StackOverflow https://stackoverflow.com/questions/4008170

سؤال

أحاول إنشاء نموذج لصفحات المحتوى على موقعي ، وأعطيته مرجعًا ذاتيًا يسمى "صفحة ذات صلة". الآن إذا قمت ببناء طرزاتي وحاولت إنشاء صفحة جديدة في مولد المسؤول ، كل شيء يعمل بشكل جيد. إذا أعطيت الصفحة صفحة ذات صلة (أو أكثر) ، فهي تعمل بشكل جيد أيضًا ، ولكن إذا ذهبت إلى الصفحة الأخرى وحاولت تحرير المراجع Symfony Musts:

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

لقد راجعت ذلك في PhpmyAdmin ولاحظت أنه في جدول الارتباط ، لديّ معرفان (ID1 و ID2) وفقط المعرف الأول هو رابط:

(آسف لم أستطع لصق رابط)

حاولت إعطاء حقل "معرف" لجدول الارتباط ، لذا كان لدي 3 حقول (ID ، ID1 ، ID2) ، ورأيت أنه عندما أقوم بتحديث العلاقات في الصفحة الأخرى (Page2 إلى Page1 و Page2 إلى Page3) ، IT هل يقوم بإنشاء العلاقات لتلك الصفحة (Page2 to Page1 و Page3) وهو يحذف العلاقات القديمة (كانت الصفحة 1 إلى Page2 و Page1 إلى Page3) والعلاقات النهائية التي لدي في جدول الارتباط هي الصفحة 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. هل يجب علي كتابة بعض التعليمات البرمجية للتعامل مع هذا ، أم أفعل شيئًا خاطئًا؟

راجعت وثائق العقيدة:نص الارتباط

ويبدو أن كل شيء على ما يرام.

هل كانت مفيدة؟

المحلول 2

حسنًا ، لقد كان نوعًا من عقيدة العقيدة:

نص الارتباط

الحل هناك.

نصائح أخرى

تحتاج إلى إضافة onDelete: CASCADE إلى RelatedPages علاقة.

ها هو علة symfony: http://trac.symfony-project.org/ticket/6273

حل EDEM لا يعمل بالنسبة لي.
هذا هو الحل.
اكتب هذا في lib/model/knowndpage.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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top