mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
BUGFIX Fixed HasManyList and ManyManyList queries for relationships on new records (was returning all available records due to the SQL filtering ignoring ID=0)
This commit is contained in:
parent
e0bd5d1070
commit
bb6d4c506e
@ -1320,7 +1320,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
||||
|
||||
$result = new HasManyList($componentClass, $joinField);
|
||||
if($this->model) $result->setModel($this->model);
|
||||
if($this->ID) $result->setForeignID($this->ID);
|
||||
$result->setForeignID($this->ID);
|
||||
|
||||
$result = $result->where($filter)->limit($limit)->sort($sort);
|
||||
if($join) $result = $result->join($join);
|
||||
@ -1412,7 +1412,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
||||
|
||||
// If this is called on a singleton, then we return an 'orphaned relation' that can have the
|
||||
// foreignID set elsewhere.
|
||||
if($this->ID) $result->setForeignID($this->ID);
|
||||
$result->setForeignID($this->ID);
|
||||
|
||||
return $result->where($filter)->sort($sort)->limit($limit);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ class HasManyList extends RelationList {
|
||||
if(is_array($this->foreignID)) {
|
||||
return "\"$this->foreignKey\" IN ('" .
|
||||
implode("', '", array_map('Convert::raw2sql', $this->foreignID)) . "')";
|
||||
} else if($this->foreignID){
|
||||
} else if($this->foreignID !== null){
|
||||
return "\"$this->foreignKey\" = '" .
|
||||
Convert::raw2sql($this->foreignID) . "'";
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ class ManyManyList extends RelationList {
|
||||
if(is_array($this->foreignID)) {
|
||||
return "\"$this->joinTable\".\"$this->foreignKey\" IN ('" .
|
||||
implode("', '", array_map('Convert::raw2sql', $this->foreignID)) . "')";
|
||||
} else if($this->foreignID){
|
||||
} else if($this->foreignID !== null){
|
||||
return "\"$this->joinTable\".\"$this->foreignKey\" = '" .
|
||||
Convert::raw2sql($this->foreignID) . "'";
|
||||
}
|
||||
|
@ -946,7 +946,7 @@ class Member extends DataObject {
|
||||
*/
|
||||
public function Groups() {
|
||||
$groups = new Member_GroupSet('Group', 'Group_Members', 'GroupID', 'MemberID');
|
||||
if($this->ID) $groups->setForeignID($this->ID);
|
||||
$groups->setForeignID($this->ID);
|
||||
|
||||
$this->extend('updateGroups', $groups);
|
||||
|
||||
|
20
tests/model/HasManyListTest.php
Normal file
20
tests/model/HasManyListTest.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
class HasManyListTest extends SapphireTest {
|
||||
|
||||
// Borrow the model from DataObjectTest
|
||||
public static $fixture_file = 'DataObjectTest.yml';
|
||||
|
||||
protected $extraDataObjects = array(
|
||||
'DataObjectTest_Team',
|
||||
'DataObjectTest_SubTeam',
|
||||
'DataObjectTest_Player',
|
||||
);
|
||||
|
||||
public function testRelationshipEmptyOnNewRecords() {
|
||||
// Relies on the fact that (unrelated) comments exist in the fixture file already
|
||||
$newTeam = new DataObjectTest_Team(); // has_many Comments
|
||||
$this->assertEquals(array(), $newTeam->Comments()->column('ID'));
|
||||
}
|
||||
|
||||
}
|
@ -16,6 +16,12 @@ class ManyManyListTest extends SapphireTest {
|
||||
$this->assertEquals(2, $list->count());
|
||||
}
|
||||
|
||||
public function testRelationshipEmptyOnNewRecords() {
|
||||
// Relies on the fact that (unrelated) teams exist in the fixture file already
|
||||
$newPlayer = new DataObjectTest_Player(); // many_many Teams
|
||||
$this->assertEquals(array(), $newPlayer->Teams()->column('ID'));
|
||||
}
|
||||
|
||||
public function testAddingSingleDataObjectByReference() {
|
||||
$player1 = $this->objFromFixture('DataObjectTest_Player', 'player1');
|
||||
$team1 = $this->objFromFixture('DataObjectTest_Team', 'team1');
|
||||
|
Loading…
Reference in New Issue
Block a user