Ensure that afterFind is called when using 'joins' with 'recursive' = -1

This commit is contained in:
chinpei215 2014-08-27 15:09:58 +09:00
parent b74774bb0c
commit 31204832c2
2 changed files with 54 additions and 3 deletions

View file

@ -1143,10 +1143,10 @@ class DboSource extends DataSource {
}
}
}
}
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
$this->_filterResults($resultSet, $Model, $filtered);
}
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
$this->_filterResults($resultSet, $Model, $filtered);
}
if ($recursive !== null) {

View file

@ -1509,6 +1509,57 @@ class DboSourceTest extends CakeTestCase {
$this->assertCount(2, $result['Article']['Comment']);
}
/**
* Test that afterFind is called correctly for 'joins'
*
* @return void
*/
public function testJoinsAfterFind() {
$this->loadFixtures('Article', 'User');
$User = new User();
$User->bindModel(array('hasOne' => array('Article')));
$Article = $this->getMock('Article', array('afterFind'), array(), '', true);
$Article->expects($this->once())
->method('afterFind')
->with(
array(
0 => array(
'Article' => array(
'id' => '1',
'user_id' => '1',
'title' => 'First Article',
'body' => 'First Article Body',
'published' => 'Y',
'created' => '2007-03-18 10:39:23',
'updated' => '2007-03-18 10:41:31'
)
)
),
$this->isFalse()
)
->will($this->returnArgument(0));
$User->Article = $Article;
$User->find('first', array(
'fields' => '*',
'conditions' => array('User.id' => 1),
'recursive' => -1,
'joins' => array(
array(
'table' => 'articles',
'alias' => 'Article',
'type' => 'LEFT',
'conditions' => array(
'Article.user_id = User.id'
),
)
),
'order' => array('Article.id')
));
}
/**
* Test that afterFind is called correctly for 'hasOne' association.
*