コード例 #1
0
 /**
  * test that saving habtm records respects conditions set in the 'conditions' key
  * for the association.
  *
  * @return void
  */
 public function testHabtmSaveWithConditionsInAssociation()
 {
     $this->loadFixtures('JoinThing', 'Something', 'SomethingElse');
     $Something = new Something();
     $Something->unbindModel(array('hasAndBelongsToMany' => array('SomethingElse')), false);
     $Something->bindModel(array('hasAndBelongsToMany' => array('DoomedSomethingElse' => array('className' => 'SomethingElse', 'joinTable' => 'join_things', 'conditions' => array('JoinThing.doomed' => true), 'unique' => true), 'NotDoomedSomethingElse' => array('className' => 'SomethingElse', 'joinTable' => 'join_things', 'conditions' => array('JoinThing.doomed' => 0), 'unique' => true))), false);
     $result = $Something->read(null, 1);
     $this->assertTrue(empty($result['NotDoomedSomethingElse']));
     $this->assertEquals(1, count($result['DoomedSomethingElse']));
     $data = array('Something' => array('id' => 1), 'NotDoomedSomethingElse' => array('NotDoomedSomethingElse' => array(array('something_else_id' => 2, 'doomed' => 0), array('something_else_id' => 3, 'doomed' => 0))));
     $Something->create($data);
     $result = $Something->save();
     $this->assertFalse(empty($result));
     $result = $Something->read(null, 1);
     $this->assertEquals(2, count($result['NotDoomedSomethingElse']));
     $this->assertEquals(1, count($result['DoomedSomethingElse']));
 }
コード例 #2
0
 /**
  * test after find callback on related model
  * 
  * @return void 
  */
 public function testRelatedAfterFindCallback()
 {
     $this->loadFixtures('Something', 'SomethingElse', 'JoinThing');
     $Something = new Something();
     $Something->bindModel(array('hasMany' => array('HasMany' => array('className' => 'JoinThing', 'foreignKey' => 'something_id')), 'hasOne' => array('HasOne' => array('className' => 'JoinThing', 'foreignKey' => 'something_id'))));
     $results = $Something->find('all');
     $expected = array(array('Something' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'), 'HasOne' => array('id' => '1', 'something_id' => '1', 'something_else_id' => '2', 'doomed' => true, 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind'), 'HasMany' => array(array('id' => '1', 'something_id' => '1', 'something_else_id' => '2', 'doomed' => true, 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind')), 'SomethingElse' => array(array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind', 'JoinThing' => array('doomed' => true, 'something_id' => '1', 'something_else_id' => '2', 'afterFind' => 'Successfully added by AfterFind')))), array('Something' => array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31'), 'HasOne' => array('id' => '2', 'something_id' => '2', 'something_else_id' => '3', 'doomed' => false, 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind'), 'HasMany' => array(array('id' => '2', 'something_id' => '2', 'something_else_id' => '3', 'doomed' => false, 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind')), 'SomethingElse' => array(array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind', 'JoinThing' => array('doomed' => false, 'something_id' => '2', 'something_else_id' => '3', 'afterFind' => 'Successfully added by AfterFind')))), array('Something' => array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31'), 'HasOne' => array('id' => '3', 'something_id' => '3', 'something_else_id' => '1', 'doomed' => true, 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind'), 'HasMany' => array(array('id' => '3', 'something_id' => '3', 'something_else_id' => '1', 'doomed' => true, 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind')), 'SomethingElse' => array(array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind', 'JoinThing' => array('doomed' => true, 'something_id' => '3', 'something_else_id' => '1', 'afterFind' => 'Successfully added by AfterFind')))));
     $this->assertEquals($expected, $results, 'Model related with has* afterFind callback fails');
     $JoinThing = new JoinThing();
     $JoinThing->unbindModel(array('belongsTo' => array('Something')));
     $results = $JoinThing->find('all');
     $expected = array(array('JoinThing' => array('id' => '1', 'something_id' => '1', 'something_else_id' => '2', 'doomed' => true, 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind'), 'SomethingElse' => array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind')), array('JoinThing' => array('id' => '2', 'something_id' => '2', 'something_else_id' => '3', 'doomed' => false, 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind'), 'SomethingElse' => array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind')), array('JoinThing' => array('id' => '3', 'something_id' => '3', 'something_else_id' => '1', 'doomed' => true, 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind'), 'SomethingElse' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind')));
     $this->assertEquals($expected, $results, 'Model related with belongsTo afterFind callback fails');
 }