Browse Source

First steps to fix the softdelete issue

ahwelp 2 năm trước cách đây
mục cha
commit
94793fa252
1 tập tin đã thay đổi với 20 bổ sung10 xóa
  1. 20 10
      src/ORM/BelongsToManyExtended.php

+ 20 - 10
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;
     }