From 919da9e6c6c4623cafbec03299f9b4b1789b2510 Mon Sep 17 00:00:00 2001 From: zYne Date: Sun, 20 May 2007 20:49:42 +0000 Subject: [PATCH] --- lib/Doctrine/Relation/Exception.php | 34 +++++++++++++++++++++++++++++ lib/Doctrine/Relation/Parser.php | 30 ++++++++++++++++--------- 2 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 lib/Doctrine/Relation/Exception.php diff --git a/lib/Doctrine/Relation/Exception.php b/lib/Doctrine/Relation/Exception.php new file mode 100644 index 000000000..cd1198fb0 --- /dev/null +++ b/lib/Doctrine/Relation/Exception.php @@ -0,0 +1,34 @@ +. + */ +Doctrine::autoload('Doctrine_Exception'); +/** + * Doctrine_Relation_Exception + * + * @package Doctrine + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision: 1344 $ + * @author Konsta Vesterinen + */ +class Doctrine_Relation_Exception extends Doctrine_Exception +{ } diff --git a/lib/Doctrine/Relation/Parser.php b/lib/Doctrine/Relation/Parser.php index 7b93e0c70..2994adc43 100644 --- a/lib/Doctrine/Relation/Parser.php +++ b/lib/Doctrine/Relation/Parser.php @@ -107,6 +107,14 @@ class Doctrine_Relation_Parser $alias = $name; } + if ( ! isset($options['definer'])) { + throw new Doctrine_Relation_Exception('Relation definer not set.'); + } + + if ( ! isset($options['type'])) { + throw new Doctrine_Relation_Exception('Relation type not set.'); + } + $this->_pending[$alias] = array_merge($options, array('class' => $name, 'alias' => $alias)); } @@ -124,16 +132,18 @@ class Doctrine_Relation_Parser } public function completeDefinition($def) { - $def['table'] = $this->_table->getConnection()->getTable($def['class']); + $conn = $this->_table->getConnection(); + $def['table'] = $conn->getTable($def['class']); + $def['definer'] = $conn->getTable($def['definer']); if (isset($def['local'])) { if ( ! isset($def['foreign'])) { // local key is set, but foreign key is not // try to guess the foreign key - if ($def['local'] === $this->_table->getIdentifier()) { - $column = strtolower($this->_table->getComponentName()) - . '_' . $this->_table->getIdentifier(); + if ($def['local'] === $def['definer']->getIdentifier()) { + $column = strtolower($def['definer']->getComponentName()) + . '_' . $def['definer']->getIdentifier(); if ( ! $def['table']->hasColumn($column)) { // auto-add column @@ -150,30 +160,30 @@ class Doctrine_Relation_Parser if (isset($def['foreign'])) { // local key not set, but foreign key is set // try to guess the local key - if ($def['foreign'] === $this->_table->getIdentifier()) { + if ($def['foreign'] === $def['definer']->getIdentifier()) { $column = strtolower($def['table']->getComponentName()) . '_' . $def['table']->getIdentifier(); $def['local'] = $column; } else { - $def['local'] = $this->_table->getIdentifier(); + $def['local'] = $def['definer']->getIdentifier(); } } else { // neither local or foreign key is being set // try to guess both keys - $column = strtolower($this->_table->getComponentName()) - . '_' . $this->_table->getIdentifier(); + $column = strtolower($def['definer']->getComponentName()) + . '_' . $def['definer']->getIdentifier(); if ($def['table']->hasColumn($column)) { $def['foreign'] = $column; - $def['local'] = $this->_table->getIdentifier(); + $def['local'] = $def['definer']->getIdentifier(); } else { $column = strtolower($def['table']->getComponentName()) . '_' . $def['table']->getIdentifier(); - if ($this->_table->hasColumn($column)) { + if ($def['definer']->hasColumn($column)) { $def['foreign'] = $def['table']->getIdentifier(); $def['local'] = $column; }