connectors
This commit is contained in:
		
							parent
							
								
									9204f70e50
								
							
						
					
					
						commit
						54113fffc0
					
				|  | @ -9,7 +9,7 @@ use Fufle\ORM\Model as BaseModel; | |||
| class Job extends BaseModel { | ||||
|     public int $id; | ||||
|     public float $budget; | ||||
|     public static function QueryModel() { | ||||
|     public static function SetQueryModel() { | ||||
|         return new JobQuery( static::class ); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,6 +7,6 @@ use Fufle\ORM\Query as BaseQuery; | |||
| 
 | ||||
| class JobQuery extends BaseQuery implements IJobQuery { | ||||
|     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 | ||||
| 
 | ||||
| namespace Fufle\Database; | ||||
| namespace Fufle\ORM\Database; | ||||
| 
 | ||||
| class QueryData { | ||||
|     public function __construct( | ||||
|  | @ -24,7 +24,7 @@ abstract class Model { | |||
| 
 | ||||
|     protected static function QueryModel() { | ||||
|         if (self::$query === null && self::class !== static::class) { | ||||
|             self::$query = static::QueryModel(); | ||||
|             self::$query = static::SetQueryModel(); | ||||
|         } | ||||
|         return self::$query; | ||||
|     } | ||||
|  | @ -59,4 +59,6 @@ abstract class Model { | |||
|             $params, | ||||
|             get_called_class()); | ||||
|     } | ||||
|      | ||||
|     abstract public static function SetQueryModel(): IQuery; | ||||
| } | ||||
|  | @ -1,7 +1,7 @@ | |||
| <?php | ||||
| namespace Fufle\ORM; | ||||
| 
 | ||||
| class Query { | ||||
| class Query implements IQuery { | ||||
|     protected string $table; | ||||
|     protected string $primaryKey; | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,8 +4,17 @@ require_once __DIR__ . '/../vendor/autoload.php'; | |||
| use Fufle\Demo\Model\Job; | ||||
| use Fufle\Database\ConnectionManager; | ||||
| 
 | ||||
| $dns = 'pgsql:host=localhost;port=5432;dbname=dynamic;user=dynamic;password=password123'; | ||||
| ConnectionManager::Connect($dns); | ||||
| //$dns = 'pgsql:host=localhost;port=5432;dbname=dynamic;user=dynamic;password=password123';
 | ||||
| $params = [ | ||||
|     'pgsql', | ||||
|     'localhost', | ||||
|     5432, | ||||
|     'dynamic_dev', | ||||
|     'dynamic', | ||||
|     'password123', | ||||
| ]; | ||||
| ConnectionManager::RegisterConnector(new PostgresConnector()); | ||||
| ConnectionManager::Connect(...$params); | ||||
| echo " | ||||
| 
 | ||||
| ";
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue