Browse Source

* Fix host mapping
* Fix aliases declaration to handle when data isn't being set
* Fix Relationship::from()

Nathaniel van Diepen 8 years ago
parent
commit
91d8ece433
3 changed files with 49 additions and 37 deletions
  1. 2 2
      app.class.php
  2. 42 30
      orm.abstract.class.php
  3. 5 5
      relationship.class.php

+ 2 - 2
app.class.php

@@ -18,7 +18,7 @@
 		public function __construct(string $name, Callable $fn = null, array $events = null){
 			$this->name = $name;
 			$this->router = new Router();
-			$this->response =  = new Response();
+			$this->response = new Response();
 			$this->routers = [];
 			$this->domains = [];
 			$this->_onerror = function($req, $res, $error){
@@ -162,7 +162,7 @@
 				$handle = [$handle];
 			}
 			foreach($handle as $host2){
-				$this->domains[$host] = $host2;
+				$this->domains[$host2] = $host;
 			}
 			return $this;
 		}

+ 42 - 30
orm.abstract.class.php

@@ -19,37 +19,49 @@
 		// Magic functions
 		private function __construct($idOrData){
 			if(!isset(self::$aliases[$this->name])){
-				foreach(static::$belongs_to as $alias => $details){
-					self::$aliases[$this->name]['belongs_to'][$alias] = array_merge(
-						[
-							'model'=>$alias,
-							'foreign_key'=>$this->name.static::foreign_key_suffix()
-						],
-						$details
-					);
+				$aliases = [
+					'belongs_to' => [],
+					'has_one' => [],
+					'has_many' => []
+				];
+				if(is_array(static::$belongs_to)){
+					foreach(static::$belongs_to as $alias => $details){
+						$aliases['belongs_to'][$alias] = array_merge(
+							[
+								'model'=>$alias,
+								'foreign_key'=>$this->name.static::foreign_key_suffix()
+							],
+							$details
+						);
+					}
 				}
-				foreach(static::$has_one as $alias => $details){
-					self::$aliases[$this->name]['has_one'][$alias] = array_merge(
-						[
-							'model'=>$alias,
-							'foreign_key'=>$alias.static::foreign_key_suffix()
-						],
-						$details
-					);
+				if(is_array(static::$has_one)){
+					foreach(static::$has_one as $alias => $details){
+						$aliases['has_one'][$alias] = array_merge(
+							[
+								'model'=>$alias,
+								'foreign_key'=>$alias.static::foreign_key_suffix()
+							],
+							$details
+						);
+					}
 				}
-				foreach(static::$has_many as $alias => $details){
-					self::$aliases[$this->name]['has_many'][$alias] = array_merge(
-						[
-							'model'=>$alias,
-							'foreign_key'=>$this->name.static::foreign_key_suffix(),
-							'through'=> null
-						],
-						$details
-					);
+				if(is_array(static::$has_many)){
+					foreach(static::$has_many as $alias => $details){
+						$aliases['has_many'][$alias] = array_merge(
+							[
+								'model'=>$alias,
+								'foreign_key'=>$this->name.static::foreign_key_suffix(),
+								'through'=> null
+							],
+							$details
+						);
+					}
 				}
+				self::$aliases[$this->name] = $aliases;
+				// Clear relationship definitions to save memory
+				static::$belongs_to = static::$has_one = static::$has_many = null;
 			}
-			// Clear relationship definitions to save memory
-			static::$belongs_to = static::$has_one = static::$has_many =null;
 			if(is_array($idOrData)){
 				if(isset($idOrData[static::primary_key()]) && self::cached($idOrData[static::primary_key()])){
 					throw new Exception('Instance already cached');
@@ -366,15 +378,15 @@
 		public function related(string $name){
 			if(!isset($this->_related[$name])){
 				$aliases = self::$aliases[$this->name];
-				if($aliases['belongs_to'][$name]){
+				if(isset($aliases['belongs_to'][$name])){
 					$alias = $aliases['has_many'][$name];
 					$class = "Models\\{$alias['model']}";
 					$this->_related[$name] = $class::fetch([$alias['foreign_key'] => $this->id])[0];
-				}elseif($aliases['has_one'][$name]){
+				}elseif(isset($aliases['has_one'][$name])){
 					$alias = $aliases['has_many'][$name];
 					$class = "Models\\{$alias['model']}";
 					$this->_related[$name] = $class::instance($this[$alias['foreign_key']]);
-				}elseif($aliases['has_many'][$name]){
+				}elseif(isset($aliases['has_many'][$name])){
 					$alias = $aliases['has_many'][$name];
 					$class = "Models\\{$alias['model']}";
 					$sql = "select ";

+ 5 - 5
relationship.class.php

@@ -7,7 +7,11 @@
 		private $removed = [];
 		private $added = [];
 		public static function from(ORM $model, string $name, array $alias, array $data){
-			$earray = parent::from($data)
+			$earray = parent::from($data);
+			$earray->model = $model;
+			$earray->name = $name;
+			$earray->alias = $alias;
+			return $earray
 				->on('set', function(&$offset, &$value) use($earray){
 					$earray->added = array_merge($earray->added, [$value]);
 					$earray->removed = array_diff($earray->removed, [$value]);
@@ -15,10 +19,6 @@
 					$earray->removed = array_merge($earray->removed, [$value]);
 					$earray->added = array_diff($earray->added, [$value]);
 				});
-			$earray->model = $model;
-			$earray->name = $name;
-			$earray->alias = $alias;
-			return $earray;
 		}
 		public function add(ORM $model){
 			$this[] = $model;