diff --git a/tests/Relation/ManyToMany2TestCase.php b/tests/Relation/ManyToMany2TestCase.php new file mode 100644 index 000000000..85a88c80c --- /dev/null +++ b/tests/Relation/ManyToMany2TestCase.php @@ -0,0 +1,106 @@ +tables = array('TestUser', 'TestMovie', 'TestMovieUserBookmark', 'TestMovieUserVote'); + parent::prepareTables(); + } + + public function testManyToManyCreateSelectAndUpdate() { + $user = new TestUser(); + $user['name'] = 'tester'; + $user->save(); + + $data = new TestMovie(); + $data['name'] = 'movie'; + $data['User'] = $user; + $data['MovieBookmarks'][0] = $user; + $data['MovieVotes'][0] = $user; + $data->save(); //All ok here + + $this->conn->clear(); + + $q = new Doctrine_Query(); + $newdata = $q->select('m.*') + ->from('TestMovie m') + ->execute() + ->getFirst(); + $newdata['name'] = 'movie2'; + try { + $newdata->save(); //big failure here + $this->pass(); + } catch(Doctrine_Exception $e) { + print $e; + $this->fail(); + } + + } +} + +class TestUser extends Doctrine_Record +{ + public function setUp() + { + $this->hasMany('TestMovie as UserBookmarks', + array('local' => 'user_id', + 'foreign' => 'movie_id', + 'refClass' => 'TestMovieUserBookmark')); + + $this->hasMany('TestMovie as UserVotes', + array('local' => 'user_id', + 'foreign' => 'movie_id', + 'refClass' => 'TestMovieUserVote')); + + } + public function setTableDefinition() + { + $this->hasColumn('name', 'string', 30); + } +} + +class TestMovie extends Doctrine_Record +{ + + public function setUp() + { + $this->hasOne('TestUser as User', + array('local' => 'user_id', + 'foreign' => 'id')); + + $this->hasMany('TestUser as MovieBookmarks', + array('local' => 'movie_id', + 'foreign' => 'user_id', + 'refClass' => 'TestMovieUserBookmark')); + + $this->hasMany('TestUser as MovieVotes', + array('local' => 'movie_id', + 'foreign' => 'user_id', + 'refClass' => 'TestMovieUserVote')); + } + + public function setTableDefinition() + { + $this->hasColumn('user_id', 'integer', null); + $this->hasColumn('name', 'string', 30); + } +} + +class TestMovieUserBookmark extends Doctrine_Record +{ + public function setTableDefinition() + { + $this->hasColumn('user_id', 'integer', null, array('primary' => true)); + $this->hasColumn('movie_id', 'integer', null, array('primary' => true)); + } +} + +class TestMovieUserVote extends Doctrine_Record +{ + public function setTableDefinition() { + $this->hasColumn('vote', 'string', 30); + $this->hasColumn('user_id', 'integer', null, array('primary' => true)); + $this->hasColumn('movie_id', 'integer', null, array('primary' => true)); + } +}