Micro-ORM/index.php

65 lines
1.5 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);
return $stmt->fetchObject($output);
}
}
abstract class BaseModel {
protected static $sql = null;
public static function Get(int $id) {
self::Initialize();
return ConnectionManager::Query(
self::$sql->Get(),
[],
get_called_class());
}
private static function Initialize() {
if (self::$sql === null) {
throw new Exception('sql not inited');
}
}
}
class JobSql implements ISqlBase {
public function Get(): string {
return "Select * from jobs where id = :id";
}
public static function Create() {
return new Job();
}
}
class Job extends BaseModel {
private static $sql = JobSql::Create();
public function __construct() {
parent::__construct( new JobSql() );
}
}
$dns = 'pgsql:host=localhost;port=5432;dbname=dynamic_dev;user=test;password=pass123';
ConnectionManager::Connect($dns);
echo "
";
var_dump(Job::Get(10));
echo "
";