mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 11:28:25 +00:00
Merge pull request #4409 from chinpei215/master-issue2268-fix2
hasOne/belongsTo associations should contain associated records in afterFind
This commit is contained in:
commit
4922729432
2 changed files with 117 additions and 8 deletions
|
@ -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();
|
||||||
|
@ -1148,11 +1143,11 @@ class DboSource extends DataSource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
|
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
|
||||||
$this->_filterResults($resultSet, $Model, $filtered);
|
$this->_filterResults($resultSet, $Model, $filtered);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($recursive !== null) {
|
if ($recursive !== null) {
|
||||||
$Model->recursive = $modelRecursive;
|
$Model->recursive = $modelRecursive;
|
||||||
|
|
|
@ -1508,4 +1508,118 @@ 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 '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' => array(
|
||||||
|
'Article.id',
|
||||||
|
'Article.user_id',
|
||||||
|
'Article.title',
|
||||||
|
'Article.body',
|
||||||
|
'Article.published',
|
||||||
|
'Article.created',
|
||||||
|
'Article.updated'
|
||||||
|
),
|
||||||
|
'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.
|
||||||
|
*
|
||||||
|
* @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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue