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