. */ /** * Doctrine_Query_MultiJoin_TestCase * * @package Doctrine * @author Konsta Vesterinen * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @category Object Relational Mapping * @link www.phpdoctrine.com * @since 1.0 * @version $Revision$ */ class Doctrine_Query_MultiJoin_TestCase extends Doctrine_UnitTestCase { public function testInitializeData() { $query = new Doctrine_Query($this->connection); $user = $this->connection->getTable('User')->find(4); $album = $this->connection->create("Album"); $album->Song[0]; $user->Album[0]->name = "Damage Done"; $user->Album[1]->name = "Haven"; $user->Album[0]->Song[0]->title = "Damage Done"; $user->Album[0]->Song[1]->title = "The Treason Wall"; $user->Album[0]->Song[2]->title = "Monochromatic Stains"; $this->assertEqual(count($user->Album[0]->Song), 3); $user->Album[1]->Song[0]->title = "Not Built To Last"; $user->Album[1]->Song[1]->title = "The Wonders At Your Feet"; $user->Album[1]->Song[2]->title = "Feast Of Burden"; $user->Album[1]->Song[3]->title = "Fabric"; $this->assertEqual(count($user->Album[1]->Song), 4); $user->save(); $user = $this->objTable->find(4); $this->assertEqual(count($user->Album[0]->Song), 3); $this->assertEqual(count($user->Album[1]->Song), 4); $user = $this->connection->getTable('User')->find(5); $user->Album[0]->name = "Clayman"; $user->Album[1]->name = "Colony"; $user->Album[1]->Song[0]->title = "Colony"; $user->Album[1]->Song[1]->title = "Ordinary Story"; $user->save(); $this->assertEqual(count($user->Album[0]->Song), 0); $this->assertEqual(count($user->Album[1]->Song), 2); } public function testMultipleOneToManyFetching() { $this->connection->clear(); $query = new Doctrine_Query(); $users = $query->query("FROM User.Album.Song, User.Phonenumber WHERE User.id IN (4,5)"); $this->assertEqual($users->count(), 2); $this->assertEqual($users[0]->id, 4); $this->assertEqual($users[0]->Album[0]->name, 'Damage Done'); $this->assertEqual($users[0]->Album[0]->Song[0]->title, 'Damage Done'); $this->assertEqual($users[0]->Album[0]->Song[1]->title, 'The Treason Wall'); $this->assertEqual($users[0]->Album[0]->Song[2]->title, 'Monochromatic Stains'); $this->assertEqual($users[0]->Album[1]->name, 'Haven'); $this->assertEqual($users[0]->Album[1]->Song[0]->title, 'Not Built To Last'); $this->assertEqual($users[0]->Album[1]->Song[1]->title, 'The Wonders At Your Feet'); $this->assertEqual($users[0]->Album[1]->Song[2]->title, 'Feast Of Burden'); $this->assertEqual($users[0]->Album[1]->Song[3]->title, 'Fabric'); $this->assertEqual($users[1]->id, 5); $this->assertEqual($users[1]->Album[0]->name, 'Clayman'); $this->assertEqual($users[1]->Album[1]->name, 'Colony'); $this->assertEqual($users[1]->Album[1]->Song[0]->title, 'Colony'); $this->assertEqual($users[1]->Album[1]->Song[1]->title, 'Ordinary Story'); $this->assertEqual($users[0]->Phonenumber[0]->phonenumber, '123 123'); $this->assertEqual($users[1]->Phonenumber[0]->phonenumber, '123 123'); $this->assertEqual($users[1]->Phonenumber[1]->phonenumber, '456 456'); $this->assertEqual($users[1]->Phonenumber[2]->phonenumber, '789 789'); } public function testInitializeMoreData() { $user = $this->connection->getTable('User')->find(4); $user->Book[0]->name = 'The Prince'; $user->Book[0]->Author[0]->name = 'Niccolo Machiavelli'; $user->Book[1]->Author[1]->name = 'Someone'; $user->Book[1]->name = 'The Art of War'; $user->Book[1]->Author[0]->name = 'Someone'; $user->Book[0]->Author[1]->name = 'Niccolo Machiavelli'; $user->save(); $user = $this->connection->getTable('User')->find(5); $user->Book[0]->name = 'Zadig'; $user->Book[0]->Author[0]->name = 'Voltaire'; $user->Book[1]->Author[1]->name = 'Someone'; $user->Book[1]->name = 'Candide'; $user->Book[1]->Author[0]->name = 'Someone'; $user->Book[0]->Author[1]->name = 'Voltaire'; $user->save(); $this->connection->clear(); } public function testMultipleOneToManyFetching2() { $query = new Doctrine_Query(); $users = $query->query("FROM User.Album.Song, User.Book.Author WHERE User.id IN (4,5)"); $this->assertEqual($users->count(), 2); $this->assertEqual($users[0]->id, 4); $this->assertEqual($users[0]->Album[0]->name, 'Damage Done'); $this->assertEqual($users[0]->Album[0]->Song[0]->title, 'Damage Done'); $this->assertEqual($users[0]->Album[0]->Song[1]->title, 'The Treason Wall'); $this->assertEqual($users[0]->Album[0]->Song[2]->title, 'Monochromatic Stains'); $this->assertEqual($users[0]->Album[1]->name, 'Haven'); $this->assertEqual($users[0]->Album[1]->Song[0]->title, 'Not Built To Last'); $this->assertEqual($users[0]->Album[1]->Song[1]->title, 'The Wonders At Your Feet'); $this->assertEqual($users[0]->Album[1]->Song[2]->title, 'Feast Of Burden'); $this->assertEqual($users[0]->Album[1]->Song[3]->title, 'Fabric'); $this->assertEqual($users[0]->Book[0]->Author[0]->name, 'Niccolo Machiavelli'); $this->assertEqual($users[0]->Book[1]->Author[1]->name, 'Someone'); $this->assertEqual($users[0]->Book[1]->name, 'The Art of War'); $this->assertEqual($users[0]->Book[1]->Author[0]->name, 'Someone'); $this->assertEqual($users[0]->Book[0]->Author[1]->name, 'Niccolo Machiavelli'); $this->assertEqual($users[1]->id, 5); $this->assertEqual($users[1]->Album[0]->name, 'Clayman'); $this->assertEqual($users[1]->Album[1]->name, 'Colony'); $this->assertEqual($users[1]->Album[1]->Song[0]->title, 'Colony'); $this->assertEqual($users[1]->Album[1]->Song[1]->title, 'Ordinary Story'); $this->assertEqual($users[1]->Book[0]->name, 'Zadig'); $this->assertEqual($users[1]->Book[0]->Author[0]->name, 'Voltaire'); $this->assertEqual($users[1]->Book[1]->Author[1]->name, 'Someone'); $this->assertEqual($users[1]->Book[1]->name, 'Candide'); $this->assertEqual($users[1]->Book[1]->Author[0]->name, 'Someone'); $this->assertEqual($users[1]->Book[0]->Author[1]->name, 'Voltaire'); } public function testMultipleOneToManyFetchingWithOrderBy() { $query = new Doctrine_Query(); $users = $query->query("FROM User.Album.Song WHERE User.id IN (4,5) ORDER BY User.Album.Song.title DESC"); } } /** class Record_District extends Record { public function setUp () { $this->hasOne('Record_Card as Card', 'Record_District.district_id'); $this->hasOne('Record_City as City', 'Record_District.city_id'); $this->hasMany('Record_Building as Building', 'Record_BuildingDistrict.building_id'); } public function setTableDefinition () { $this->setTableName('district'); $this->hasColumn('district_id', 'integer', 8, array('primary', 'unsigned', 'notnull', 'default' => 0)); $this->hasColumn('city_id', 'integer', 8, array('unsigned', 'notnull')); $this->hasColumn('city', 'string', 50, array('notnull', 'default' => '')); $this->hasColumn('district', 'string', 50, array('notnull', 'default' => '')); $this->hasColumn('matchword', 'string', 50); $this->has_coord_columns(); $this->has_status_columns(); } } $dql_building = " FROM Record_Building b LEFT JOIN b.District d LEFT JOIN d.City c LEFT JOIN b.Address a WHERE b.building_id = {$id} "; $collection = $this->db->query($dql_building); $br = $collection[0]; echo "building:{$br->building_id}\n"; foreach ($br->District as $district) { echo "district:{$district->district_id} {$district->district} {$district->City->city}\n"; } // Notice: Trying to get property of non-object in /www/igglo2_doctrine/core/class/BuildingDAO.php on line 92 */