connectors
This commit is contained in:
		
							parent
							
								
									9204f70e50
								
							
						
					
					
						commit
						54113fffc0
					
				|  | @ -9,7 +9,7 @@ use Fufle\ORM\Model as BaseModel; | ||||||
| class Job extends BaseModel { | class Job extends BaseModel { | ||||||
|     public int $id; |     public int $id; | ||||||
|     public float $budget; |     public float $budget; | ||||||
|     public static function QueryModel() { |     public static function SetQueryModel() { | ||||||
|         return new JobQuery( static::class ); |         return new JobQuery( static::class ); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7,6 +7,6 @@ use Fufle\ORM\Query as BaseQuery; | ||||||
| 
 | 
 | ||||||
| class JobQuery extends BaseQuery implements IJobQuery { | class JobQuery extends BaseQuery implements IJobQuery { | ||||||
|     public function GetLast10(): string { |     public function GetLast10(): string { | ||||||
|         return "select * from jobs order by id desc limit 10"; |         return "SELECT * from jobs order by id desc limit 10"; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,32 +0,0 @@ | ||||||
| <?php |  | ||||||
| 
 |  | ||||||
| namespace Fufle\Database; |  | ||||||
| 
 |  | ||||||
| use PDO; |  | ||||||
| use Fufle\Database\QueryData; |  | ||||||
| 
 |  | ||||||
| class ConnectionManager { |  | ||||||
|     private static $connection; |  | ||||||
| 
 |  | ||||||
|     public static function connect(string $connectionString) { |  | ||||||
|         self::$connection = new PDO($connectionString); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static function Query(string $query, array|object $params = [], string $output = 'stdObject') { |  | ||||||
|         $data = new QueryData($query, $params); |  | ||||||
|         $data->normalize(); |  | ||||||
|         $stmt = self::$connection->prepare($data->query); |  | ||||||
|         $stmt->execute($data->params); |  | ||||||
|         $stmt->setFetchMode(PDO::FETCH_CLASS, $output); |  | ||||||
|         return $stmt->fetch(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public static function QueryAll(string $query, array|object $params = [], string $output = 'stdObject') { |  | ||||||
|         $data = new QueryData($query, $params); |  | ||||||
|         $data->normalize(); |  | ||||||
|         $stmt = self::$connection->prepare($data->query); |  | ||||||
|         $stmt->execute($data->params); |  | ||||||
|         $stmt->setFetchMode(PDO::FETCH_CLASS, $output); |  | ||||||
|         return $stmt->fetchAll(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  | @ -0,0 +1,52 @@ | ||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace Fufle\ORM\Database; | ||||||
|  | 
 | ||||||
|  | use PDO; | ||||||
|  | use Fufle\ORM\Database\QueryData; | ||||||
|  | use Fufle\ORM\Database\Connectors\IConnector; | ||||||
|  | 
 | ||||||
|  | class ConnectionManager { | ||||||
|  |     private static $connection; | ||||||
|  |     private static $connectors = []; | ||||||
|  |     private static string $connectionString; | ||||||
|  |     private static Credentials $credentials; | ||||||
|  | 
 | ||||||
|  |     public static function RegisterConnector(IConnector $connector) { | ||||||
|  |         self::$connectors[] = $connector; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static function Connect(string $driver, $host, $port = null, $database = null, $user = null, $password = null) { | ||||||
|  |         foreach (self::$connectors as $c) { | ||||||
|  |             if ($c->driverEquals($driver)) { | ||||||
|  |                 $credentials = new Credentials($host, $port, $database, $user, $password); | ||||||
|  |                 self::$connectionString = $c->getConnectionString($credentials); | ||||||
|  |                 self::ConnectWithString(self::$connectionString); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         throw new Exception('Driver not found'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static function ConnectWithString(string $connectionString) { | ||||||
|  |         self::$connection = new PDO($connectionString); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static function Query(string $query, array|object $params = [], string $output = 'stdObject') { | ||||||
|  |         $data = new QueryData($query, $params); | ||||||
|  |         $data->normalize(); | ||||||
|  |         $stmt = self::$connection->prepare($data->query); | ||||||
|  |         $stmt->execute($data->params); | ||||||
|  |         $stmt->setFetchMode(PDO::FETCH_CLASS, $output); | ||||||
|  |         return $stmt->fetch(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static function QueryAll(string $query, array|object $params = [], string $output = 'stdObject') { | ||||||
|  |         $data = new QueryData($query, $params); | ||||||
|  |         $data->normalize(); | ||||||
|  |         $stmt = self::$connection->prepare($data->query); | ||||||
|  |         $stmt->execute($data->params); | ||||||
|  |         $stmt->setFetchMode(PDO::FETCH_CLASS, $output); | ||||||
|  |         return $stmt->fetchAll(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,9 @@ | ||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace Fufle\ORM\Database\Connectors; | ||||||
|  | 
 | ||||||
|  | use Fufle\ORM\Database\Credentials; | ||||||
|  | 
 | ||||||
|  | class IConnector { | ||||||
|  |     public function getConnectionString(Credentials $credentials); | ||||||
|  | } | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace Fufle\ORM\Database\Connectors; | ||||||
|  | 
 | ||||||
|  | use Fufle\ORM\Database\Credentials; | ||||||
|  | 
 | ||||||
|  | class PostgresConnector implements IConnector { | ||||||
|  |     public function getConnectionString(Credentials $credentials) { | ||||||
|  |         return ""; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,15 @@ | ||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | namespace Fufle\ORM\Database; | ||||||
|  | 
 | ||||||
|  | class Credentials { | ||||||
|  |      | ||||||
|  |     public function __construct( | ||||||
|  |         public string $host, | ||||||
|  |         public int $port = null, | ||||||
|  |         public string $database = null, | ||||||
|  |         public string $user = null, | ||||||
|  |         public string $password = null) { | ||||||
|  |     } | ||||||
|  |      | ||||||
|  | } | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| <?php | <?php | ||||||
| 
 | 
 | ||||||
| namespace Fufle\Database; | namespace Fufle\ORM\Database; | ||||||
| 
 | 
 | ||||||
| class QueryData { | class QueryData { | ||||||
|     public function __construct( |     public function __construct( | ||||||
|  | @ -24,7 +24,7 @@ abstract class Model { | ||||||
| 
 | 
 | ||||||
|     protected static function QueryModel() { |     protected static function QueryModel() { | ||||||
|         if (self::$query === null && self::class !== static::class) { |         if (self::$query === null && self::class !== static::class) { | ||||||
|             self::$query = static::QueryModel(); |             self::$query = static::SetQueryModel(); | ||||||
|         } |         } | ||||||
|         return self::$query; |         return self::$query; | ||||||
|     } |     } | ||||||
|  | @ -59,4 +59,6 @@ abstract class Model { | ||||||
|             $params, |             $params, | ||||||
|             get_called_class()); |             get_called_class()); | ||||||
|     } |     } | ||||||
|  |      | ||||||
|  |     abstract public static function SetQueryModel(): IQuery; | ||||||
| } | } | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| <?php | <?php | ||||||
| namespace Fufle\ORM; | namespace Fufle\ORM; | ||||||
| 
 | 
 | ||||||
| class Query { | class Query implements IQuery { | ||||||
|     protected string $table; |     protected string $table; | ||||||
|     protected string $primaryKey; |     protected string $primaryKey; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,8 +4,17 @@ require_once __DIR__ . '/../vendor/autoload.php'; | ||||||
| use Fufle\Demo\Model\Job; | use Fufle\Demo\Model\Job; | ||||||
| use Fufle\Database\ConnectionManager; | use Fufle\Database\ConnectionManager; | ||||||
| 
 | 
 | ||||||
| $dns = 'pgsql:host=localhost;port=5432;dbname=dynamic;user=dynamic;password=password123'; | //$dns = 'pgsql:host=localhost;port=5432;dbname=dynamic;user=dynamic;password=password123';
 | ||||||
| ConnectionManager::Connect($dns); | $params = [ | ||||||
|  |     'pgsql', | ||||||
|  |     'localhost', | ||||||
|  |     5432, | ||||||
|  |     'dynamic_dev', | ||||||
|  |     'dynamic', | ||||||
|  |     'password123', | ||||||
|  | ]; | ||||||
|  | ConnectionManager::RegisterConnector(new PostgresConnector()); | ||||||
|  | ConnectionManager::Connect(...$params); | ||||||
| echo " | echo " | ||||||
| 
 | 
 | ||||||
| ";
 | ";
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue