<?php
/**
* *
* * please don't remove this comment block
* *
* * @author phptricks Team - Mohammad Anzawi
* * @author_uri https://phptricks.org
* * @uri https://github.com/anzawi/php-database-class
* * @version 5.0.0
* * @licence MIT -> https://opensource.org/licenses/MIT
* * @package PHPtricks\Orm
*
*/
namespace PHPtricks\Orm\DML;
trait Query
{
/**
* find single row from table via id
*
* @param int $id [description]
*
* @return Collection or object (as you choice from config file) results
* or empty
*/
public function find($id)
{
return $this->where($this->_idColumn, $id)
->first();
}
/**
* Get First record Only
*/
public function first($fields = ['*'], $last = false)
{
$results = $this->select($fields, $last);
return $this->collection([
'results' => isset($results[0]) ? $results[0] : [],
'table' => $this->_table,
'id' => $this->_idColumn,
'relations' => $this->_relations,
]);
}
/**
* select from database
*
* @param array $fields fields we need to select
*
* @return Collection result of select as Collection object
*/
public function select($fields = ['*'], $last = false)
{
if ($fields === true) {
$fields = ['*'];
$last = true;
}
if ($fields != ['*'] && ! is_null($this->_idColumn)) {
if ( ! in_array($this->_idColumn, $fields)) {
$fields[$this->_idColumn];
}
}
if ( ! $last) {
$sql = "SELECT ".implode(', ', $fields)
." FROM {$this->_table} as other {$this->_query}";
} else {
//$this->_query .= ($this->_ordering == false ? " ORDER BY {$this->_idColumn} DESC" : '');
$sql = "SELECT * FROM (
SELECT ".implode(', ', $fields)."
FROM {$this->_table} as other
{$this->_query}
) sub ORDER by {$this->id()} ASC";
}
$this->_query = $sql;
$this->_ordering = false;
return $this->collection([
'results' => $this->query($sql)->results(),
'table' => $this->_table,
'id' => $this->_idColumn,
'relations' => $this->_relations,
]);
}
/**
* DB::query()
* check if sql statement is prepare
* append value for sql statement if $params is set
* fetch results
*
* @param string $sql
* @param array $params
*
* @return mixed
*/
protected function query($sql, $params = [])
{
/*
// uncomment this line to see your query
var_dump($sql);
*/
$this->_query = "";
$this->_where = "WHERE";
// set _error. true to that if they can not be false for this function to work properly, this function makes the
// value of _error false if there is no implementation of the sentence correctly
$this->_error = false;
// check if sql statement is prepared
$query = $this->_pdo->prepare($sql);
// if $params isset
if (count($params)) {
/**
* @var $x int
* counter
*/
$x = 1;
foreach ($params as $param) {
// append values to sql statement
$query->bindValue($x, $param);
$x++;
}
}
// check if sql statement executed
if ($query->execute()) {
try {
$this->_results = $query->fetchAll(\config('fetch'));
} catch (\PDOException $e) {
}
$this->_sql = $query;
// set _results = retrieved data
// set _count = count rows comes
$this->_count = $query->rowCount();
} else {
$this->_error = true;
}
return $this;
}
/**
* find records by columns
* USING :
* $db->findBy('username', 'ali')->first(); // or select() or paginate()
*
* @param $column
* @param $value
*
* @return mixed
*/
public function findBy($column, $value)
{
return $this->where($column, $value);
}
}
|