Просмотр исходного кода

Creating relations abstract classes

ahwelp 3 лет назад
Родитель
Сommit
ec52a9b573
5 измененных файлов с 169 добавлено и 0 удалено
  1. 24 0
      src/ORM/BelongsTo.php
  2. 49 0
      src/ORM/BelongsToMany.php
  3. 53 0
      src/ORM/BelongsToManyExtended.php
  4. 21 0
      src/ORM/HasMany.php
  5. 22 0
      src/ORM/HasOne.php

+ 24 - 0
src/ORM/BelongsTo.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace ORM;
+
+class BelongsTo {
+
+    private $foreignObject;
+    private $localField;
+    private $remoteField;
+    private $localElement;
+
+    function __construct($foreignObject, $localField, $remoteField = 'id', $localElement) {
+        $this->foreignObject = $foreignObject;
+        $this->localField = $localField;
+        $this->remoteField = $remoteField;
+        $this->localElement = $localElement;
+    }
+
+    
+    function get() {
+        return $this->foreignObject::findOne(Array($this->remoteField => Array('=', $this->localElement->{$this->localField})));
+    }
+
+}

+ 49 - 0
src/ORM/BelongsToMany.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace ORM;
+
+class BelongsToMany {
+
+    private $localObject;
+    private $foreignObject;
+    private $pivotTable;
+    private $localInPivot;
+    private $remoteInPivot;
+    private $remoteFilter;
+    private $remoteLimit;
+
+    function __construct($localObject, $foreignObject, $pivotTable, $localInPivot, $remoteInPivot, $remoteFilter = Array(), $remoteLimit = Array()) {
+        $this->localObject = $localObject;
+        $this->foreignObject = $foreignObject;
+        $this->pivotTable = $pivotTable;
+        $this->localInPivot = $localInPivot;
+        $this->remoteInPivot = $remoteInPivot;
+        $this->remoteFilter = $remoteFilter;
+        $this->remoteLimit = $remoteLimit;
+    }
+
+    function get() {
+        
+        $limitsSql = '';
+        foreach ($this->remoteLimit as $key => $value) {
+            $limitsSql .= "$key $value ";
+        }
+
+        $pivotTable = '{' . $this->pivotTable . '}';        
+        $sql = "SELECT $this->remoteInPivot FROM $pivotTable WHERE $this->localInPivot = ? $limitsSql";
+        
+        $relations = DBInstance::query($sql, Array($this->localObject->id), $this->localObject::_connectionName);
+                
+        $ids = Array();        
+        foreach ($relations as $relation) {
+            $ids[] = $relation->{$this->remoteInPivot};
+        }
+        
+        if (empty($ids)) {
+            return Array();
+        }
+        
+        return $this->foreignObject::findMany(array_merge(Array('id' => Array('IN', $ids)), $this->remoteFilter), Array('*'), $this->remoteLimit);        
+    }
+
+}

+ 53 - 0
src/ORM/BelongsToManyExtended.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace ORM;
+
+class BelongsToManyExtended {
+
+    private $localObject;
+    private $foreignObject;
+    private $pivotTable;
+    private $localInPivot;
+    private $remoteInPivot;
+    private $remoteFilter;
+    private $remoteLimit;
+
+    function __construct($localObject, $foreignObject, $pivotTable, $localInPivot, $remoteInPivot, $remoteFilter = Array(), $remoteLimit = Array()) {
+        $this->localObject = $localObject;
+        $this->foreignObject = $foreignObject;
+        $this->pivotTable = $pivotTable;
+        $this->localInPivot = $localInPivot;
+        $this->remoteInPivot = $remoteInPivot;
+        $this->remoteFilter = $remoteFilter;
+        $this->remoteLimit = $remoteLimit;
+    }
+    
+    function get(){
+        
+        $limitsSql = '';
+        foreach ($this->remoteLimit as $key => $value) {
+            $limitsSql .= "$key $value ";
+        }
+        
+        $pivotTable = '{' . $this->pivotTable . '}';        
+        $sql = "SELECT * FROM $pivotTable WHERE $this->localInPivot = ? $limitsSql";
+        
+        $relations = DBInstance::query($sql, Array($this->localObject->id), $this->localObject::_connectionName);        
+        $objects = Array();
+
+        if (empty($relations)) {
+            return Array();
+        }
+        
+        foreach ($relations as $relation) {
+            $relation->childElement = $this->foreignObject::findOne(array_merge(Array("id" => Array("=", $relation->{$this->remoteInPivot})), $this->remoteFilter));
+            $objects[] = $relation;
+        }
+        
+        if (empty($objects)) {
+            return Array();
+        }
+        return $objects;
+    }
+
+}

+ 21 - 0
src/ORM/HasMany.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace ORM;
+
+class HasMany {
+
+    private $foreignObject;
+    private $remoteField;
+    private $localElement;
+
+    function __construct($foreignObject, $remoteField, $localElement) {
+        $this->foreignObject = $foreignObject;
+        $this->remoteField = $remoteField;
+        $this->localElement = $localElement;
+    }
+
+    function get() {
+        return $this->foreignObject::findMany(Array($this->remoteField => Array('=', $this->localElement->id)));
+    }
+
+}

+ 22 - 0
src/ORM/HasOne.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace ORM
+;
+
+class HasOne{
+
+    private $foreignObject;
+    private $remoteField;
+    private $localElement;
+
+    function __construct($foreignObject, $remoteField, $localElement) {
+        $this->foreignObject = $foreignObject;
+        $this->remoteField = $remoteField;
+        $this->localElement = $localElement;
+    }
+    
+    function get(){
+        return $this->foreignObject::findOne(Array($this->remoteField => Array('=', $this->localElement->id)));
+    }
+    
+}