mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-01-31 17:16:18 +00:00
Prevent unneeded afterFind callback triggering on associated models. Fixes #2057
This commit is contained in:
parent
8473d6a660
commit
1244656595
3 changed files with 105 additions and 6 deletions
|
@ -990,7 +990,7 @@ class DboSource extends DataSource {
|
||||||
$queryData = $this->_scrubQueryData($queryData);
|
$queryData = $this->_scrubQueryData($queryData);
|
||||||
|
|
||||||
$null = null;
|
$null = null;
|
||||||
$array = array();
|
$array = array('callbacks' => $queryData['callbacks']);
|
||||||
$linkedModels = array();
|
$linkedModels = array();
|
||||||
$bypass = false;
|
$bypass = false;
|
||||||
|
|
||||||
|
@ -1043,7 +1043,11 @@ class DboSource extends DataSource {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$filtered = $this->_filterResults($resultSet, $model);
|
$filtered = array();
|
||||||
|
|
||||||
|
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
|
||||||
|
$filtered = $this->_filterResults($resultSet, $model);
|
||||||
|
}
|
||||||
|
|
||||||
if ($model->recursive > -1) {
|
if ($model->recursive > -1) {
|
||||||
foreach ($_associations as $type) {
|
foreach ($_associations as $type) {
|
||||||
|
@ -1071,7 +1075,9 @@ class DboSource extends DataSource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->_filterResults($resultSet, $model, $filtered);
|
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
|
||||||
|
$this->_filterResults($resultSet, $model, $filtered);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_null($recursive)) {
|
if (!is_null($recursive)) {
|
||||||
|
@ -1162,7 +1168,9 @@ class DboSource extends DataSource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->_filterResults($fetch, $model);
|
if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
|
||||||
|
$this->_filterResults($fetch, $model);
|
||||||
|
}
|
||||||
return $this->_mergeHasMany($resultSet, $fetch, $association, $model, $linkModel);
|
return $this->_mergeHasMany($resultSet, $fetch, $association, $model, $linkModel);
|
||||||
} elseif ($type === 'hasAndBelongsToMany') {
|
} elseif ($type === 'hasAndBelongsToMany') {
|
||||||
$ins = $fetch = array();
|
$ins = $fetch = array();
|
||||||
|
@ -2093,6 +2101,7 @@ class DboSource extends DataSource {
|
||||||
static $base = null;
|
static $base = null;
|
||||||
if ($base === null) {
|
if ($base === null) {
|
||||||
$base = array_fill_keys(array('conditions', 'fields', 'joins', 'order', 'limit', 'offset', 'group'), array());
|
$base = array_fill_keys(array('conditions', 'fields', 'joins', 'order', 'limit', 'offset', 'group'), array());
|
||||||
|
$base['callbacks'] = null;
|
||||||
}
|
}
|
||||||
return (array)$data + $base;
|
return (array)$data + $base;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1002,7 +1002,8 @@ class MysqlTest extends CakeTestCase {
|
||||||
'order' => array(),
|
'order' => array(),
|
||||||
'limit' => array(),
|
'limit' => array(),
|
||||||
'offset' => array(),
|
'offset' => array(),
|
||||||
'group' => array()
|
'group' => array(),
|
||||||
|
'callbacks' => null
|
||||||
);
|
);
|
||||||
$queryData['joins'][0]['table'] = $this->Dbo->fullTableName($queryData['joins'][0]['table']);
|
$queryData['joins'][0]['table'] = $this->Dbo->fullTableName($queryData['joins'][0]['table']);
|
||||||
$this->assertEqual($queryData, $expected);
|
$this->assertEqual($queryData, $expected);
|
||||||
|
|
|
@ -4933,6 +4933,95 @@ class ModelReadTest extends BaseModelTest {
|
||||||
$this->assertEqual($expected, $result);
|
$this->assertEqual($expected, $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* testAssociationAfterFindCallbacksDisabled method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testAssociationAfterFindCalbacksDisabled() {
|
||||||
|
$this->loadFixtures('Post', 'Author', 'Comment');
|
||||||
|
$TestModel = new Post();
|
||||||
|
$result = $TestModel->find('all', array('callbacks' => false));
|
||||||
|
$expected = array(
|
||||||
|
array(
|
||||||
|
'Post' => array(
|
||||||
|
'id' => '1',
|
||||||
|
'author_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'
|
||||||
|
),
|
||||||
|
'Author' => array(
|
||||||
|
'id' => '1',
|
||||||
|
'user' => 'mariano',
|
||||||
|
'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
|
||||||
|
'created' => '2007-03-17 01:16:23',
|
||||||
|
'updated' => '2007-03-17 01:18:31'
|
||||||
|
)),
|
||||||
|
array(
|
||||||
|
'Post' => array(
|
||||||
|
'id' => '2',
|
||||||
|
'author_id' => '3',
|
||||||
|
'title' => 'Second Post',
|
||||||
|
'body' => 'Second Post Body',
|
||||||
|
'published' => 'Y',
|
||||||
|
'created' => '2007-03-18 10:41:23',
|
||||||
|
'updated' => '2007-03-18 10:43:31'
|
||||||
|
),
|
||||||
|
'Author' => array(
|
||||||
|
'id' => '3',
|
||||||
|
'user' => 'larry',
|
||||||
|
'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
|
||||||
|
'created' => '2007-03-17 01:20:23',
|
||||||
|
'updated' => '2007-03-17 01:22:31'
|
||||||
|
)),
|
||||||
|
array(
|
||||||
|
'Post' => array(
|
||||||
|
'id' => '3',
|
||||||
|
'author_id' => '1',
|
||||||
|
'title' => 'Third Post',
|
||||||
|
'body' => 'Third Post Body',
|
||||||
|
'published' => 'Y',
|
||||||
|
'created' => '2007-03-18 10:43:23',
|
||||||
|
'updated' => '2007-03-18 10:45:31'
|
||||||
|
),
|
||||||
|
'Author' => array(
|
||||||
|
'id' => '1',
|
||||||
|
'user' => 'mariano',
|
||||||
|
'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
|
||||||
|
'created' => '2007-03-17 01:16:23',
|
||||||
|
'updated' => '2007-03-17 01:18:31'
|
||||||
|
)));
|
||||||
|
$this->assertEqual($expected, $result);
|
||||||
|
unset($TestModel);
|
||||||
|
|
||||||
|
$Author = new Author();
|
||||||
|
$Author->Post->bindModel(array(
|
||||||
|
'hasMany' => array(
|
||||||
|
'Comment' => array(
|
||||||
|
'className' => 'ModifiedComment',
|
||||||
|
'foreignKey' => 'article_id',
|
||||||
|
)
|
||||||
|
)));
|
||||||
|
$result = $Author->find('all', array(
|
||||||
|
'conditions' => array('Author.id' => 1),
|
||||||
|
'recursive' => 2,
|
||||||
|
'callbacks' => false
|
||||||
|
));
|
||||||
|
$expected = 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->assertEqual($result[0]['Post'][0]['Comment'][0], $expected);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests that the database configuration assigned to the model can be changed using
|
* Tests that the database configuration assigned to the model can be changed using
|
||||||
* (before|after)Find callbacks
|
* (before|after)Find callbacks
|
||||||
|
|
Loading…
Add table
Reference in a new issue