Creating relations abstract classes

This commit is contained in:
ahwelp
2022-03-23 22:01:08 +00:00
parent f5c2a9b6f4
commit ec52a9b573
5 changed files with 169 additions and 0 deletions
+24
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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)));
}
}