hasOne/belongsTo associations should contain associated records in afterFind

Before 1fe943d6f1,
afterFind() is called twice with belongsTo/hasOne associations.
Although $results also doesn't contain associated records on first time,
it contains them on second time.

After 1fe943d6f1,
it doesn't work if associated records are used in afterFind.
This commit fixes it.
This commit is contained in:
chinpei215 2014-08-27 09:32:00 +09:00
parent 5863adda42
commit b74774bb0c
2 changed files with 55 additions and 5 deletions

View file

@ -1113,11 +1113,6 @@ class DboSource extends DataSource {
$filtered = array(); $filtered = array();
// Filter hasOne and belongsTo associations
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
$filtered = $this->_filterResults($resultSet, $Model);
}
// Deep associations // Deep associations
if ($Model->recursive > -1) { if ($Model->recursive > -1) {
$joined = array(); $joined = array();

View file

@ -1508,4 +1508,59 @@ class DboSourceTest extends CakeTestCase {
$this->assertCount(2, $result['Article']['Tag']); $this->assertCount(2, $result['Article']['Tag']);
$this->assertCount(2, $result['Article']['Comment']); $this->assertCount(2, $result['Article']['Comment']);
} }
/**
* Test that afterFind is called correctly for 'hasOne' association.
*
* @return void
*/
public function testHasOneAfterFind() {
$this->loadFixtures('Article', 'User', 'Comment');
$User = new User();
$User->bindModel(array('hasOne' => array('Article')));
$Article = $this->getMock('Article', array('afterFind'), array(), '', true);
$Article->unbindModel(array(
'belongsTo' => array('User'),
'hasMany' => array('Comment'),
'hasAndBelongsToMany' => array('Tag')
));
$Article->bindModel(array(
'hasOne' => array('Comment'),
));
$Article->expects($this->once())
->method('afterFind')
->with(
$this->equalTo(
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',
'Comment' => array(
'id' => '1',
'article_id' => '1',
'user_id' => '2',
'comment' => 'First Comment for First Article',
'published' => 'Y',
'created' => '2007-03-18 10:45:23',
'updated' => '2007-03-18 10:47:31',
)
)
)
)
),
$this->isFalse()
)
->will($this->returnArgument(0));
$User->Article = $Article;
$User->find('first', array('conditions' => array('User.id' => 1), 'recursive' => 2));
}
} }