PHP Classes

File: phptricksORM/DDL/Base.php

Recommend this page to a friend!
  Classes of mohammad anzawi   PHP PDO database class   phptricksORM/DDL/Base.php   Download  
File: phptricksORM/DDL/Base.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP PDO database class
Access databases using PDO
Author: By
Last change: New Version (5.0.0)
Date: 3 years ago
Size: 4,525 bytes
 

Contents

Class file image Download
<?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 Base
 *
 * @package PHPtricks\Orm\DDL
 */
trait Base
{

    use
Vars;
    use
Create;
    use
Alter;

   
/**
     * set _schema var value
     *
     * @param array $structures the structure of table
     *
     * @return object return Collection object
     */
   
public function schema($structures = [])
    {
        if (
count($structures)) // check if isset $structures
       
{
           
/**
             * to store columns structures
             *
             * @var array
             */
           
$schema = [];

            foreach (
$structures as $column => $options) {
               
$type = $options; // the type is the prototype of column
               
$constraints = ''; // store all constraints for one column

                // check if we have a constraints
               
if ( ! strpos($options, '|') === false) {
                   
$constraints = explode('|',
                       
$options); // the separator to constraints is --> | <--
                   
$type = $constraints[0]; // the type is first key
                   
unset($constraints[0]); // remove type from constraints
                   
$constraints = implode(' ',
                       
$constraints); // convert constraints to string
                   
$constraints = strtr($constraints, [
                       
'primary' => 'PRIMARY KEY',
                       
// change (primary to PRIMARY KEY -> its valid constraint in sql)
                       
'increment' => 'AUTO_INCREMENT', // same primary
                       
'not_null' => 'NOT NULL', // same primary
                   
]);
                }

               
// check if type is 'increments' we want to change it to integer and add some constraints like primary key ,not null, unsigned and auto increment
               
($type == 'increments' ?
                   
$type = "INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL"
                   
: null);

               
// check if type of column is string change it to valid sql type (VARCHAR and set length)
                // ['username' => 'string:255'] convert to username VARCHAR(255)
               
if (strpos($type, 'string') !== false) {
                   
$type = explode(':', $type);
                   
$type = "VARCHAR({$type[1]})";
                }

               
// check if column has a default value
                // ['username' => 'string:255|default:no-name'] convert to username VARCHAR(255) DEFAULT 'no name'
               
if (strpos($constraints, 'default') !== false) {
                   
preg_match("/(:)[A-Za-z0-9](.*)+/", $constraints, $match);

                   
$match[0] = str_replace(':', '', $match[0]);
                   
$temp = str_replace('-', ' ', $match[0]);
                   
$constraints = str_replace(":".$match[0], " '{$temp}' ",
                       
$constraints);
                }

               
// add key to schema var contains column _type constraints
                // ex: username VARCHAR(255) DEFUALT 'no name' NOT NULL
               
$schema[] = "$column $type ".$constraints;
            }

           
// set _schema the all columns structure
           
$this->_schema = '('.implode(",", $schema).')';

            return
$this; // return DB object
       
}

        return
null; // return null
   
}

   
/**
     * check if table is exist in database
     *
     * @param string $table
     *
     * @return bool
     */
    /* public function tableExist($table = '')
        {
            $table = $this->query("SHOW TABLES LIKE '{$table}'")->results();

            if (!is_null($table) && count($table)) {
                return true;
            }

            return false;
        }*/

    /**
     * @return mixed
     */
   
public function showMeSchema()
    {
        return
$this->_schema;
    }

   
/**
     * @param string $error
     *
     * @return string
     */
   
protected function setError(string $error)
    {
        return
$this->_errors[] = $error;
    }

   
/**
     * @return string
     */
   
public function getErrors()
    {
        return
implode('\n', $this->_errors);
    }

}