Sfoglia il codice sorgente

New features, counting registers, fetch one

Artur 7 anni fa
parent
commit
563c08e4b2
2 ha cambiato i file con 51 aggiunte e 14 eliminazioni
  1. 5 0
      src/BBOrm/DBInstance.php
  2. 46 14
      src/BBOrm/Entity.php

+ 5 - 0
src/BBOrm/DBInstance.php

@@ -18,6 +18,11 @@ class DBInstance {
         $con = Connections::get_connection('default');
         return $con->query($sql, \PDO::FETCH_OBJ);
     }
+    
+    public static function query_one($sql, $instance = 'default') {
+        $con = Connections::get_connection('default');
+        return $con->query($sql, \PDO::FETCH_OBJ)->fetch();
+    }
 
     public static function query_prepare($sql, $arguments, $instance = 'default'){
         $con = Connections::get_connection('default');

+ 46 - 14
src/BBOrm/Entity.php

@@ -147,6 +147,34 @@ abstract class Entity {
         return $objects;
     }
 
+    public function count($criterias = Array(), $trashed = false) {
+        $criteria_sql = "";
+
+        foreach ($criterias as $key => $criteria) {
+            if ($criteria_sql != "") {
+                $criteria_sql .= " AND ";
+            } else {
+                $criteria_sql .= " WHERE ";
+            }
+
+            if (is_string($criteria[1])) {
+                $criteria_sql .= "$key $criteria[0] '$criteria[1]'";
+            } else {
+                $criteria_sql .= "$key $criteria[0] $criteria[1]";
+            }
+        }
+
+        if ($this->softdelete && !$trashed) {
+            $sql = "SELECT COUNT(*) FROM $this->table_name $criteria_sql AND deleted_at is null";
+        } else {
+            $sql = "SELECT COUNT(*) FROM $this->table_name $criteria_sql";
+        }
+
+        $results = DBInstance::query_one($sql, $this->connection_name);
+
+        return $results->count;
+    }
+
     public function find_one($criterias = Array(), $select = Array('*'), $trashed = false) {
         $select_sql = "";
         $criteria_sql = "";
@@ -157,6 +185,8 @@ abstract class Entity {
         foreach ($criterias as $key => $criteria) {
             if ($criteria_sql != "") {
                 $criteria_sql .= " AND ";
+            } else {
+                $criteria_sql .= " WHERE ";
             }
             if (is_string($criteria[1])) {
                 $criteria_sql .= "$key $criteria[0] '$criteria[1]'";
@@ -175,9 +205,9 @@ abstract class Entity {
         }
 
         if ($this->softdelete && !$trashed) {
-            $sql = "SELECT $select_sql FROM $this->table_name WHERE $criteria_sql AND deleted_at is null $limits_sql";
+            $sql = "SELECT $select_sql FROM $this->table_name $criteria_sql AND deleted_at is null $limits_sql";
         } else {
-            $sql = "SELECT $select_sql FROM $this->table_name WHERE $criteria_sql $limits_sql";
+            $sql = "SELECT $select_sql FROM $this->table_name $criteria_sql $limits_sql";
         }
         $results = DBInstance::query($sql, $this->connection_name);
         $objects = Array();
@@ -205,6 +235,8 @@ abstract class Entity {
         foreach ($criterias as $key => $criteria) {
             if ($criteria_sql != "") {
                 $criteria_sql .= " AND ";
+            } else {
+                $criteria_sql .= " WHERE ";
             }
             if (is_string($criteria[1])) {
                 $criteria_sql .= "$key $criteria[0] '$criteria[1]'";
@@ -221,9 +253,9 @@ abstract class Entity {
         $select_sql = rtrim($select_sql, ', ');
 
         if ($this->softdelete && !$trashed) {
-            $sql = "SELECT $select_sql FROM $this->table_name WHERE $criteria_sql AND deleted_at is null $limits_sql";
+            $sql = "SELECT $select_sql FROM $this->table_name $criteria_sql AND deleted_at is null $limits_sql";
         } else {
-            $sql = "SELECT $select_sql FROM $this->table_name WHERE $criteria_sql $limits_sql";
+            $sql = "SELECT $select_sql FROM $this->table_name $criteria_sql $limits_sql";
         }
 
         $results = DBInstance::query($sql, $this->connection_name);
@@ -234,7 +266,7 @@ abstract class Entity {
             $object->fill($value);
             $objects[] = $object;
         }
-        if(empty($objects)){
+        if (empty($objects)) {
             return Array();
         }
         return $objects;
@@ -256,10 +288,10 @@ abstract class Entity {
     }
 
     protected function belongs_to_many($foreign_object, $pivot_table, $local_in_pivot, $remote_in_pivot, $remote_filter = Array(), $remote_limit = Array()) {
-	$obj = new $foreign_object;
+        $obj = new $foreign_object;
 
         $sql = "SELECT $remote_in_pivot FROM $pivot_table WHERE $local_in_pivot = $this->id $limits_sql";
-        
+
         $relations = DBInstance::query($sql, $this->connection_name);
         $ids = Array();
         foreach ($relations as $relation) {
@@ -268,25 +300,25 @@ abstract class Entity {
         if (empty($ids)) {
             return Array();
         }
-        return $obj->find_many( array_merge( Array( 'id' => Array('IN', $ids) ), $remote_filter), Array('*'), $remote_limit );
+        return $obj->find_many(array_merge(Array('id' => Array('IN', $ids)), $remote_filter), Array('*'), $remote_limit);
     }
 
     protected function belongs_to_many_extended($foreign_object, $pivot_table, $local_in_pivot, $remote_in_pivot, $remote_filter = Array(), $pivot_limits = Array()) {
-	    $obj = new $foreign_object;
+        $obj = new $foreign_object;
         $limits_sql = '';
         foreach ($pivot_limits as $key => $value) {
             $limits_sql .= "$key $value ";
         }
-	    
+
         $sql = "SELECT * FROM $pivot_table WHERE $local_in_pivot = $this->id $limits_sql";
         $relations = DBInstance::query($sql, $this->connection_name);
         $objects = Array();
-        
-        if(empty($relations)){ 
+
+        if (empty($relations)) {
             return Array();
-        }        
+        }
         foreach ($relations as $relation) {
-            $relation->child_element = $obj->find_one(array_merge(Array("id" => Array("=", $relation->$remote_in_pivot), $remote_filter) ));
+            $relation->child_element = $obj->find_one(array_merge(Array("id" => Array("=", $relation->$remote_in_pivot), $remote_filter)));
             $objects[] = $relation;
         }
         if (empty($objects)) {