<?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 Insert
{
/**
* get last inserted ID
*
* @return int
*/
public function lastInsertedId()
{
return $this->_pdo->lastInsertId();
}
/**
* insert or update if exists
*
* @param $values
* @param array $conditionColumn
*
* @return bool|mixed
*/
public function createOrUpdate($values, $conditionColumn = [])
{
// check if we have condition for update
// the condition must be ([column_name, value])
if (count($conditionColumn)) {
$column = $conditionColumn[0];
$value = $conditionColumn[1];
} else // if no condition so search by ID
{
$column = $this->_idColumn;
$value = isset($value[$this->_ColumnsId])
? $value[$this->_ColumnsId] : null;
}
// check if any records exists by condition
$exists = $this->findBy($column, $value)->first()->results();
// if exist so update the record's
if (count($exists)) {
return $this->where($column, $value)
->update($values);
}
// insert new record
return $this->insert($values);
}
/**
* DB::insert()
* insert into database tables
*
* @param string $table
* @param array $values
*
* @return mixed
*/
public function insert(array $values = [])
{
// check if $values set
if (count($values)) {
/**
* @var $fields type array
* store fields user want insert value for them
*/
$fields = array_keys($values);
/**
* @var $value type string
* store value for fields user want inserted
*/
$value = '';
/**
* @var $x type int
* counter
*/
$x = 1;
foreach ($values as $field) {
// add new value
$value .= "?";
if ($x < count($values)) {
// add comma between values
$value .= ", ";
}
$x++;
}
// generate sql statement
$sql = "INSERT INTO {$this->_table} (`".implode('`,`', $fields)
."`)";
$sql .= " VALUES({$value})";
// check if query is not have an error
if ( ! $this->query($sql, $values)->error()) {
return $this;
}
}
return false;
}
}
|