mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 11:28:25 +00:00
fixes #5710, HABTM - constraining unique ids, but removing non-unique
git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@8217 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
45a51ed809
commit
f2b7a26be8
2 changed files with 38 additions and 4 deletions
|
@ -858,11 +858,8 @@ class DboSource extends DataSource {
|
||||||
|
|
||||||
foreach ($fetch as $j => $data) {
|
foreach ($fetch as $j => $data) {
|
||||||
if (
|
if (
|
||||||
(isset($data[$with]) && $data[$with][$foreignKey] === $row[$model->alias][$model->primaryKey]) &&
|
(isset($data[$with]) && $data[$with][$foreignKey] === $row[$model->alias][$model->primaryKey])
|
||||||
(!in_array($data[$with][$joinKeys[1]], $uniqueIds))
|
|
||||||
) {
|
) {
|
||||||
$uniqueIds[] = $data[$with][$joinKeys[1]];
|
|
||||||
|
|
||||||
if ($habtmFieldsCount <= 2) {
|
if ($habtmFieldsCount <= 2) {
|
||||||
unset($data[$with]);
|
unset($data[$with]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13022,5 +13022,42 @@ class ModelTest extends CakeTestCase {
|
||||||
$TestModel2 =& new ArticleB();
|
$TestModel2 =& new ArticleB();
|
||||||
$this->assertEqual($TestModel2->ArticlesTag->primaryKey, 'article_id');
|
$this->assertEqual($TestModel2->ArticlesTag->primaryKey, 'article_id');
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* testFetchingNonUniqueFKJoinTableRecords()
|
||||||
|
*
|
||||||
|
* Tests if the results are properly returned in the case there are non-unique FK's
|
||||||
|
* in the join table but another fields value is different. For example:
|
||||||
|
* something_id | something_else_id | doomed = 1
|
||||||
|
* something_id | something_else_id | doomed = 0
|
||||||
|
* Should return both records and not just one.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function testFetchingNonUniqueFKJoinTableRecords() {
|
||||||
|
$this->loadFixtures('Something', 'SomethingElse', 'JoinThing');
|
||||||
|
$Something = new Something();
|
||||||
|
|
||||||
|
$joinThingData = array(
|
||||||
|
'JoinThing' => array(
|
||||||
|
'something_id' => 1,
|
||||||
|
'something_else_id' => 2,
|
||||||
|
'doomed' => '0',
|
||||||
|
'created' => '2007-03-18 10:39:23',
|
||||||
|
'updated' => '2007-03-18 10:41:31'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$Something->JoinThing->create($joinThingData);
|
||||||
|
$Something->JoinThing->save();
|
||||||
|
|
||||||
|
$result = $Something->JoinThing->find('all', array('conditions' => array('something_else_id' => 2)));
|
||||||
|
$this->assertEqual($result[0]['JoinThing']['doomed'], 1);
|
||||||
|
$this->assertEqual($result[1]['JoinThing']['doomed'], 0);
|
||||||
|
|
||||||
|
$result = $Something->find('first');
|
||||||
|
$this->assertEqual(count($result['SomethingElse']), 2);
|
||||||
|
$this->assertEqual($result['SomethingElse'][0]['JoinThing']['doomed'], 1);
|
||||||
|
$this->assertEqual($result['SomethingElse'][1]['JoinThing']['doomed'], 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
Loading…
Reference in a new issue