From 94793fa2523f3507a40602de2c2780a15906be68 Mon Sep 17 00:00:00 2001 From: ahwelp Date: Tue, 24 Jan 2023 13:33:59 +0000 Subject: [PATCH] First steps to fix the softdelete issue --- src/ORM/BelongsToManyExtended.php | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/ORM/BelongsToManyExtended.php b/src/ORM/BelongsToManyExtended.php index d1fb14c..ec1c261 100644 --- a/src/ORM/BelongsToManyExtended.php +++ b/src/ORM/BelongsToManyExtended.php @@ -11,8 +11,9 @@ class BelongsToManyExtended { private $remoteInPivot; private $remoteFilter; private $remoteLimit; + private $softDelete; - function __construct($localObject, $foreignObject, $pivotTable, $localInPivot, $remoteInPivot, $remoteFilter = Array(), $remoteLimit = Array()) { + function __construct($localObject, $foreignObject, $pivotTable, $localInPivot, $remoteInPivot, $remoteFilter = Array(), $remoteLimit = Array(), $softDelete) { $this->localObject = $localObject; $this->foreignObject = $foreignObject; $this->pivotTable = $pivotTable; @@ -20,33 +21,42 @@ class BelongsToManyExtended { $this->remoteInPivot = $remoteInPivot; $this->remoteFilter = $remoteFilter; $this->remoteLimit = $remoteLimit; + $this->softDelete = $softDelete; } - + 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); + + $pivotTable = '{' . $this->pivotTable . '}'; + + $sql = ''; + if($this->softDelete){ + $sql = "SELECT * FROM $pivotTable WHERE $this->localInPivot = ? AND deleted_at IS NULL $limitsSql"; + } else { + $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; }