Advertisement
Guest User

Untitled

a guest
Oct 14th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.00 KB | None | 0 0
  1. <?
  2. class ArrayHelper
  3. {
  4.     public static function toObject( $array ) {
  5.         if ( !is_array($array) ) {
  6.             return $array;
  7.         }
  8.  
  9.         $object = new stdClass();
  10.         if ( is_array( $array ) && count( $array ) > 0) {
  11.             foreach ( $array as $name => $value ) {
  12.                 $name = trim( $name );
  13.                 if ( !empty( $name ) )
  14.                 {
  15.                     $object->$name = self::toObject( $value );
  16.                 }
  17.             }
  18.             return $object;
  19.         }
  20.         else {
  21.             return FALSE;
  22.         }
  23.     }
  24. }
  25. class Config
  26. {
  27.     private static $config;
  28.  
  29.     public static function get()
  30.     {
  31.         if( !is_object( self::$config ))
  32.         {
  33.             $config = require_once( 'app/config.php' );
  34.             self::$config = ArrayHelper::toObject( $config );
  35.         }
  36.         return self::$config;
  37.  
  38.     }
  39. }
  40. class Connection
  41. {
  42.     protected static $conn;
  43.     protected static $dbname;
  44.  
  45.     public function connect( $dbname )
  46.     {
  47.         $settings = Config::get()->$dbname;
  48.         $dsn      = $settings->connectionString;
  49.         $username = $settings->username;
  50.         $password = $settings->password;
  51.         try
  52.         {
  53.             $conn = new PDO( $dsn, $username, $password );
  54.             $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  55.         }
  56.         catch( PDOException $e )
  57.         {
  58.             echo 'ERROR: ' . $e->getMessage();
  59.         }
  60.         self::$dbname = $dbname;
  61.         self::$conn = $conn;
  62.         return self::$conn;
  63.     }
  64.     public function disconnect()
  65.     {
  66.         self::$conn = NULL;
  67.     }
  68.     public static function current( $dbname )
  69.     {
  70.         if(self::$conn and $dbname == self::$dbname)
  71.             return self::$conn;
  72.         return self::connect( $dbname );
  73.     }
  74. }
  75.  
  76. class Query
  77. {
  78.  
  79.     protected $conn;
  80.     protected $select;
  81.     protected $table;
  82.     protected $conditions;
  83.     protected $params;
  84.     protected $offset = 0;
  85.     protected $limit;
  86.  
  87.     public function __construct( $dbname )
  88.     {
  89.         $this->conn = Connection::current( $dbname );
  90.     }
  91.     public function select( $fields )
  92.     {
  93.         if( is_array( $fields ) )
  94.             $fields = implode(', ', $fields);
  95.         $this->select = $fields;
  96.     }
  97.  
  98.     public function from( $table )
  99.     {
  100.         $this->table = $table;
  101.     }
  102.     public function where( $conditions, $params )
  103.     {
  104.         $this->conditions = $conditions;
  105.         $this->params = $params;
  106.     }
  107.     public function offset( $from )
  108.     {
  109.         $this->offset = $from;
  110.     }
  111.     public function limit( $to )
  112.     {
  113.         $this->limit = $to;
  114.     }
  115.     public function query()
  116.     {
  117.         if( $this->select )
  118.         {
  119.             $sql = "select $this->select from $this->table";
  120.         }
  121.         if( $this->conditions )
  122.         {
  123.             $sql .=" where $this->conditions";
  124.         }
  125.         if( $this->limit )
  126.         {
  127.             $sql .=" LIMIT $this->offset,$this->limit";
  128.         }
  129.         $query = $this->conn->prepare( $sql );
  130.         if( $this->params )
  131.         {
  132.             foreach($this->params as $param => $value )
  133.             {
  134.                 $query->bindParam( $param, $value );
  135.             }
  136.         }
  137.         $query->execute();
  138.  
  139.         $result = $query->fetchAll();
  140.         return $result;
  141.  
  142.     }
  143. }
  144. abstract class Model
  145. {
  146.  
  147.     protected static function build(  $attributes, $conditions, $params = NULL, $limit = NULL )
  148.     {
  149.         $table = get_called_class()::tableName();
  150.         $database = get_called_class()::database();
  151.  
  152.         $queryBuilder = new Query( $database );
  153.         $queryBuilder->select( $attributes );
  154.         $queryBuilder->from( $table );
  155.         $queryBuilder->where( $conditions, $params );
  156.         $queryBuilder->limit( $limit );
  157.         return $queryBuilder->query();
  158.     }
  159.     public function find( $conditions, $params = NULL )
  160.     {
  161.         return self::build( '*', $conditions, $params, 1 );
  162.     }
  163.     public function findAll( $conditions = NULL, $params = NULL )
  164.     {
  165.         return self::build( '*', $conditions, $params );
  166.     }
  167.     public function findByPk( $pk )
  168.     {
  169.         return self::build( '*', 'id = :id', [':id'=>$pk], 1 );
  170.     }
  171.     public function findByAttributes( $attributes, $conditions, $params = NULL )
  172.     {
  173.         return self::build( $attributes, $conditions, $params, 1  );
  174.     }
  175.     public function findAllByAttributes( $attributes, $conditions, $params = NULL ){
  176.         return self::build( $attributes, $conditions, $params );
  177.     }
  178. }
  179. class User extends Model
  180. {
  181.     public static function database()
  182.     {
  183.         return 'db1';
  184.     }
  185.     public static function tableName()
  186.     {
  187.         return 'users';
  188.     }
  189. }
  190. class Cool extends Model
  191. {
  192.     public static function database()
  193.     {
  194.         return 'db2';
  195.     }
  196.     public static function tableName()
  197.     {
  198.         return 'users';
  199.     }
  200. }
  201.  
  202.  
  203. $res = User::findAll('name like :name',[':name'=>'%dmin']);
  204. var_dump($res);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement