From 84f764cf56b8b0a339f810246ca50efe8a4e096c Mon Sep 17 00:00:00 2001 From: zYne Date: Sun, 8 Jul 2007 19:19:53 +0000 Subject: [PATCH] minor relation fix --- lib/Doctrine/Relation/Parser.php | 4 ++- tests/Relation/OneToManyTestCase.php | 46 ++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/lib/Doctrine/Relation/Parser.php b/lib/Doctrine/Relation/Parser.php index 1cb2c7f45..a48c972af 100644 --- a/lib/Doctrine/Relation/Parser.php +++ b/lib/Doctrine/Relation/Parser.php @@ -212,6 +212,7 @@ class Doctrine_Relation_Parser $def = $this->completeDefinition($def); if (isset($def['localKey'])) { + $rel = new Doctrine_Relation_LocalKey($def); } else { $rel = new Doctrine_Relation_ForeignKey($def); @@ -382,7 +383,8 @@ class Doctrine_Relation_Parser $def['localKey'] = true; } } else { - if ($def['local'] !== $this->_table->getIdentifier()) { + if ($def['local'] !== $this->_table->getIdentifier() && + $def['type'] == Doctrine_Relation::ONE) { $def['localKey'] = true; } } diff --git a/tests/Relation/OneToManyTestCase.php b/tests/Relation/OneToManyTestCase.php index dbdc0b825..0c239d7c8 100644 --- a/tests/Relation/OneToManyTestCase.php +++ b/tests/Relation/OneToManyTestCase.php @@ -34,27 +34,37 @@ class Doctrine_Relation_OneToMany_TestCase extends Doctrine_UnitTestCase { public function prepareData() { } + public function testRelationParsing() { $table = $this->conn->getTable('Entity'); $rel = $table->getRelation('Phonenumber'); - + $this->assertTrue($rel instanceof Doctrine_Relation_ForeignKey); $rel = $table->getRelation('Email'); - + $this->assertTrue($rel instanceof Doctrine_Relation_LocalKey); } + public function testRelationParsing2() { $table = $this->conn->getTable('Phonenumber'); $rel = $table->getRelation('Entity'); - + $this->assertTrue($rel instanceof Doctrine_Relation_LocalKey); } + public function testRelationParsing3() + { + $table = $this->conn->getTable('Policy'); + + $rel = $table->getRelation('PolicyAssets'); + + $this->assertTrue($rel instanceof Doctrine_Relation_ForeignKey); + } public function testRelationSaving() { $e = new Entity(); @@ -67,3 +77,33 @@ class Doctrine_Relation_OneToMany_TestCase extends Doctrine_UnitTestCase $nr->Entity = $e; } } +class Policy extends Doctrine_Record +{ + public function setTableDefinition(){ + $this->setTableName('policies'); + $this->hasColumn('policy_number', 'integer', 11, array('unique' => true)); + } + + public function setUp() + { + $this->hasMany('PolicyAsset as PolicyAssets', array('local' => 'policy_number', + 'foreign' => 'policy_number')); + $this->index('policy_number_index', array('fields' => 'policy_number')); + } +} +class PolicyAsset extends Doctrine_Record +{ + public function setTableDefinition() + { + $this->setTableName('policy_assets'); + $this->hasColumn('policy_number', 'integer', 11); + $this->hasColumn('value', 'float', 10, array ('notblank' => true,)); + } + + public function setUp(){ + $this->hasOne('Policy', array('foreign' => 'policy_number', + 'local' => 'policy_number')); + $this->index('policy_number_index', array('fields' => 'policy_number')); + $this->index('vehicle_code_index', array('fields' => 'vehicle_code')); + } +}