85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| namespace Sieciech\Orm8;
 | |
| 
 | |
| use PDO;
 | |
| 
 | |
| interface ISqlBase {
 | |
|     public function Get(): string;
 | |
|     //public function Insert(): string;
 | |
|     //public function Update(): string;
 | |
|     //public function Delete(): string;
 | |
| }
 | |
| class ConnectionManager {
 | |
|     private static $connection;
 | |
|     public static function connect(string $connectionString) {
 | |
|         self::$connection = new PDO($connectionString);
 | |
|     }
 | |
|     public static function Query(string $query, $params, $output = 'stdObject') {
 | |
|         $stmt = self::$connection->prepare($query);
 | |
|         $stmt->execute($params);
 | |
|         $stmt->setFetchMode(PDO::FETCH_CLASS, $output);
 | |
|         return $stmt->fetch();
 | |
|     }
 | |
|     public static function QueryAll(string $query, $params, $output = 'stdObject') {
 | |
|             $stmt = self::$connection->prepare($query);
 | |
|             $stmt->execute($params);
 | |
|             $stmt->setFetchMode(PDO::FETCH_CLASS, $output);
 | |
|             return $stmt->fetchAll();
 | |
|         }
 | |
| }
 | |
| abstract class BaseModel {
 | |
|     protected static ISqlBase $sql = null;
 | |
|     
 | |
|     public static function Get(int $id) {
 | |
|         static::Initialize();
 | |
|         return ConnectionManager::Query(
 | |
|             self::$sql->Get(),
 | |
|             ['id' => $id],
 | |
|             get_called_class());
 | |
|     }
 | |
|     
 | |
|     protected static function QueryAll($sql, $params) {
 | |
|         static::Initialize();
 | |
|         return ConnectionManager::QueryAll(
 | |
|                     $sql,
 | |
|                     $params,
 | |
|                     get_called_class());
 | |
|     }
 | |
|     
 | |
|     abstract public static function Initialize();
 | |
| }
 | |
| interface IJobSql extends ISqlBase {
 | |
|     public function GetLast10(): string;
 | |
| }
 | |
| class JobSql implements IJobSql {
 | |
|     public function Get(): string {
 | |
|         return "Select * from jobs where id = :id";
 | |
|     }
 | |
|     public function GetLast10() {
 | |
|         return "select * from jobs order by id desc limit 10";
 | |
|     }
 | |
| }
 | |
| 
 | |
| class Job extends BaseModel {
 | |
|     protected static IJobSql $sql;
 | |
|     public int $id;
 | |
|     public float $budget;
 | |
|     public static function Initialize() {
 | |
|         if (self::$sql === null) {
 | |
|             self::$sql = new JobSql();
 | |
|         }
 | |
|     }
 | |
|     public static function GetLast10() {
 | |
|         return self::QueryAll(self::$sql->GetLast10(), []);
 | |
|     }
 | |
| }
 | |
| $dns = 'pgsql:host=localhost;port=5432;dbname=dynamic_dev;user=test;password=pass123';
 | |
| ConnectionManager::Connect($dns);
 | |
| echo "
 | |
| 
 | |
| ";
 | |
| var_dump(Job::Get(10));
 | |
| echo "
 | |
| 
 | |
| "; |