<?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\DDL;
/**
* Trait Alter
*
* @package PHPtricks\Orm\DDL
*/
trait Alter
{
// "ALTER TABLE ADD COLUMN (COLUMN_NAME TYPE AND CONSTRAINT)"
// "ALTER TABLE DROP COLUMN COLUMN_NAME"
// "ALTER TABLE RENAME COLUMN (COLUMN_NAME TYPE AND CONSTRAINT)"
//
// table('table')->alterSchema(['add', 'column_name', 'type'])->alter();
// table('table')->alterSchema(['drop', 'column_name'])->alter();
// table('table')->alterSchema(['rename', 'column_name','new_name' ,'type'])->alter();
// table('table')->alterSchema(['modify', 'column_name', 'new_type'])->alter();
/**
* @param array $schema
*
* @return $this|null
*/
public function alterSchema($schema = [])
{
if (count($schema)) {
$function = $schema[0]."Column";
unset($schema[0]);
call_user_func_array([$this, $function], [$schema]);
return $this;
}
return null;
}
/**
* @return bool
*/
public function alter()
{
// check if table is not exist
// by default in (try catch) block we can detect this problem
// but if you want to display a custom error message you can uncomment
// this (if) block and set your error message
/*if(!$this->tableExist($this->table()))
{
print ("Oops.. cant alter table {$this->table()} because is not Exists in "
. config('host_name') . "/" . config("db_name"));
die;
}*/
try {
$this->_pdo->exec("ALTER TABLE {$this->table()} {$this->_schema}");
} catch (\PDOException $e) {
$this->setError($e->getMessage());
return false;
}
return true;
}
/**
* @param array $options
*/
public function addColumn($options = [])
{
if (count($options) === 2) {
$this->_schema = "ADD COLUMN {$options[1]} {$options[2]}";
}
}
/**
* @param array $options
*/
public function dropColumn($options = [])
{
if (count($options) === 1) {
$this->_schema = "DROP COLUMN {$options[1]}";
}
}
/**
* @param array $options
*/
public function renameColumn($options = [])
{
if (count($options) === 3) {
$this->_schema = "CHANGE {$options[1]} {$options[2]} {$options[3]}";
}
}
/**
* @param array $options
*/
public function typeColumn($options = [])
{
if (count($options) === 2) {
$this->_schema = "MODIFY {$options[1]} {$options[2]}";
}
}
}
|