From 563c08e4b2005df5897dbd162378904908f0f10b Mon Sep 17 00:00:00 2001 From: Artur Date: Mon, 7 Jan 2019 05:59:46 -0200 Subject: [PATCH] New features, counting registers, fetch one --- src/BBOrm/DBInstance.php | 5 ++++ src/BBOrm/Entity.php | 60 ++++++++++++++++++++++++++++++---------- 2 files changed, 51 insertions(+), 14 deletions(-) diff --git a/src/BBOrm/DBInstance.php b/src/BBOrm/DBInstance.php index 0e010bc..23f38ad 100644 --- a/src/BBOrm/DBInstance.php +++ b/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'); diff --git a/src/BBOrm/Entity.php b/src/BBOrm/Entity.php index 768606a..a3f1578 100644 --- a/src/BBOrm/Entity.php +++ b/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)) {