. */ /** * Doctrine_Ticket424B_TestCase * * This test case tests many-many relationship with non-autoincrement, alias primary key * * @package Doctrine * @author Tamcy <7am.online@gmail.com> * @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_Ticket_424C_TestCase extends Doctrine_UnitTestCase { public function prepareData() { } public function prepareTables() { $this->tables = array('mmrUser_C', 'mmrGroup_C', 'mmrGroupUser_C'); parent::prepareTables(); } protected function newGroup($code, $name) { $group = new mmrGroup_C(); $group->id = $code; $group->name = $name; $group->save(); return $group; } protected function newUser($code, $name, $groups) { $u = new mmrUser_C(); $u->id = $code; $u->name = $name; foreach ($groups as $idx=>$group) { $u->Group[$idx] = $group; } $u->save(); return $u; } public function testManyManyRelationWithAliasColumns() { $groupA = $this->newGroup(1, 'Group A'); $groupB = $this->newGroup(2, 'Group B'); $groupC = $this->newGroup(3, 'Group C'); $john = $this->newUser(1, 'John', array($groupA, $groupB)); $peter = $this->newUser(2, 'Peter', array($groupA, $groupC)); $alan = $this->newUser(3, 'Alan', array($groupB, $groupC)); $q = new Doctrine_Query(); $gu = $q->from('mmrGroupUser_C')->execute(); $this->assertEqual(count($gu), 6); // Direct query $q = new Doctrine_Query(); $gu = $q->from('mmrGroupUser_C')->where('group_id = ?', $groupA->id)->execute(); $this->assertEqual(count($gu), 2); // Query by join $q = new Doctrine_Query(); $userOfGroupAByName = $q->from('mmrUser_C u, u.Group g') ->where('g.name = ?', array($groupA->name)); $q->execute(); $this->assertEqual(count($userOfGroupAByName), 2); } } class mmrUser_C extends Doctrine_Record { public function setUp() { $this->hasMany('mmrGroup_C as Group', array('local' => 'user_id', 'foreign' => 'group_id', 'refClass' => 'mmrGroupUser_C')); } public function setTableDefinition() { // Works when $this->hasColumn('u_id as id', 'string', 30, array('primary' => true)); $this->hasColumn('name', 'string', 30); } } class mmrGroup_C extends Doctrine_Record { public function setUp() { $this->hasMany('mmrUser_C', array('local' => 'group_id', 'foreign' => 'user_id', 'refClass' => 'mmrGroupUser_C')); } public function setTableDefinition() { $this->hasColumn('g_id as id', 'string', 30, array('primary' => true)); $this->hasColumn('name', 'string', 30); } } class mmrGroupUser_C extends Doctrine_Record { public function setTableDefinition() { $this->hasColumn('user_id', 'string', 30, array('primary' => true)); $this->hasColumn('group_id', 'string', 30, array('primary' => true)); } }