[limb-svn] r7027 - in 3.x/trunk/limb/active_record: src tests/cases
svn at limb-project.com
svn at limb-project.com
Sun May 18 14:40:18 MSD 2008
Author: svk
Date: 2008-05-18 14:40:17 +0400 (Sun, 18 May 2008)
New Revision: 7027
URL: http://fisheye.limb-project.com/changelog/limb/?cs=7027
Modified:
3.x/trunk/limb/active_record/src/lmbAROneToManyCollection.class.php
3.x/trunk/limb/active_record/tests/cases/lmbARManyToManyCollectionTest.class.php
3.x/trunk/limb/active_record/tests/cases/lmbAROneToManyRelationsTest.class.php
3.x/trunk/limb/active_record/tests/cases/lmbARTestingObjectMother.class.php
Log:
-- one2many relation setter fixed
Modified: 3.x/trunk/limb/active_record/src/lmbAROneToManyCollection.class.php
===================================================================
--- 3.x/trunk/limb/active_record/src/lmbAROneToManyCollection.class.php 2008-05-17 17:45:21 UTC (rev 7026)
+++ 3.x/trunk/limb/active_record/src/lmbAROneToManyCollection.class.php 2008-05-18 10:40:17 UTC (rev 7027)
@@ -59,7 +59,15 @@
}
foreach($old_objects as $obj)
- $obj->destroy();
+ {
+ if (array_key_exists('nullify', $this->relation_info) && $this->relation_info['nullify'])
+ {
+ $obj->set($this->relation_info['field'], null);
+ $obj->save();
+ }
+ else
+ $obj->destroy();
+ }
}
protected function _removeRelatedRecords()
Modified: 3.x/trunk/limb/active_record/tests/cases/lmbARManyToManyCollectionTest.class.php
===================================================================
--- 3.x/trunk/limb/active_record/tests/cases/lmbARManyToManyCollectionTest.class.php 2008-05-17 17:45:21 UTC (rev 7026)
+++ 3.x/trunk/limb/active_record/tests/cases/lmbARManyToManyCollectionTest.class.php 2008-05-18 10:40:17 UTC (rev 7027)
@@ -82,6 +82,7 @@
$this->assertEqual(sizeof($arr), 0);
}
+
function testSaveWithExistingOwnerDoesNothing()
{
Modified: 3.x/trunk/limb/active_record/tests/cases/lmbAROneToManyRelationsTest.class.php
===================================================================
--- 3.x/trunk/limb/active_record/tests/cases/lmbAROneToManyRelationsTest.class.php 2008-05-17 17:45:21 UTC (rev 7026)
+++ 3.x/trunk/limb/active_record/tests/cases/lmbAROneToManyRelationsTest.class.php 2008-05-18 10:40:17 UTC (rev 7027)
@@ -439,43 +439,62 @@
function testSaveWithLessReferenceCount()
{
- $course1 = $this->creator->createCourse();
- $lecture1 = $this->creator->createLecture($course1);
- $lecture2 = $this->creator->createLecture($course1);
- $lecture3 = $this->creator->createLecture($course1);
- $course1->save();
- $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 3);
- $course_arr = $course1->export();
- $lect_arr = $course1->getLectures()->getIds();
- array_pop($lect_arr);
- $course_arr['lectures'] = $lect_arr;
- $course1->import($course_arr);
- $course1->save();
- $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 3);
+ $course = new NullifyCourse();
+ $course->setTitle("Title");
+ $lecture1 = new CanBeNullLecture();
+ $lecture1->setTitle("Lecture 1");
+ $lecture2 = new CanBeNullLecture();
+ $lecture2->setTitle("Lecture 2");
+ $lecture3 = new CanBeNullLecture();
+ $lecture3->setTitle("Lecture 3");
+ $course->setLectures(array($lecture1, $lecture2, $lecture3));
+ $course->save();
+ $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 3);
+
+ $course_arr = $course->export();
+ $lect_arr = $course->getLectures()->getIds();
+ array_pop($lect_arr);
+ $course_arr['lectures'] = $lect_arr;
+ $course->import($course_arr);
+ $course->save();
+ $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 3);
}
function testSwapRelations()
{
- $course1 = $this->creator->createCourse();
- $lectA = $this->creator->createLecture($course1);
- $lectB = $this->creator->createLecture($course1);
- $course2 = $this->creator->createCourse();
- $lectC = $this->creator->createLecture($course2);
- $lectD = $this->creator->createLecture($course2);
+
+ $course1 = new NullifyCourse();
+ $lectA = new CanBeNullLecture();
+ $lectA->setTitle("Lecture A");
+ $lectB = new CanBeNullLecture();
+ $lectB->setTitle("Lecture B");
+ $course1->setLectures(array($lectA, $lectB));
+ $course1->setTitle("Course 1");
+ $course2 = new NullifyCourse();
+ $lectC = new CanBeNullLecture();
+ $lectC->setTitle("Lecture C");
+ $lectD = new CanBeNullLecture();
+ $lectD->setTitle("Lecture D");
+ $course2->setLectures(array($lectC, $lectD));
+ $course2->setTitle("Course 2");
+
+ $course1->save();
+ $course2->save();
+ $c1 = $course1->export();
+ $c2 = $course2->export();
+ $c1['lectures'] = $course2->getLectures()->getIds();
+ $c2['lectures'] = $course1->getLectures()->getIds();
+
+ try
+ {
+ $course1->import($c1);
$course1->save();
- $course2->save();
- $c1 = $course1->export();
- $c2 = $course2->export();
- $c1['lectures'] = $course2->getLectures()->getIds();
- $c2['lectures'] = $course1->getLectures()->getIds();
- try {
- $course1->import($c1);
- $course2->import($c2);
- $c1 = $course1->save();
- $c2 = $course2->save();
- }
- catch (lmbARException $e){ }
- $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 4);
+ $course2 = new NullifyCourse($course2->getId());
+ $course2->import($c2);
+ $c2 = $course2->save();
+ }
+ catch (lmbARException $e){ }
+ $this->assertEqual(lmbActiveRecord :: find("LectureForTest")->count(), 4);
}
function _initCourse()
Modified: 3.x/trunk/limb/active_record/tests/cases/lmbARTestingObjectMother.class.php
===================================================================
--- 3.x/trunk/limb/active_record/tests/cases/lmbARTestingObjectMother.class.php 2008-05-17 17:45:21 UTC (rev 7026)
+++ 3.x/trunk/limb/active_record/tests/cases/lmbARTestingObjectMother.class.php 2008-05-18 10:40:17 UTC (rev 7027)
@@ -64,6 +64,25 @@
}
}
+class NullifyCourse extends lmbActiveRecord
+{
+ protected $_db_table_name = 'course_for_test';
+ protected $_has_many = array('lectures' => array('field' => 'course_id',
+ 'class' => 'CanBeNullLecture',
+ 'nullify' => true),
+ );
+}
+
+class CanBeNullLecture extends lmbActiveRecord
+{
+ protected $_db_table_name = 'lecture_for_test';
+ protected $_many_belongs_to = array('course' => array('field' => 'course_id',
+ 'class' => 'NullifyCourse',
+ 'can_be_null' => true),
+ );
+}
+
+
class LectureForTest extends lmbActiveRecord
{
protected $_db_table_name = 'lecture_for_test';
More information about the limb-svn
mailing list