package
This commit is contained in:
		
							parent
							
								
									64c3c3f44b
								
							
						
					
					
						commit
						c91ccb9480
					
				|  | @ -0,0 +1,22 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace App\Model; | ||||
| 
 | ||||
| use App\Query\IJobQuery; | ||||
| use App\Query\JobQuery; | ||||
| use Fufle\ORM\Model as BaseModel; | ||||
| 
 | ||||
| class JobModel extends BaseModel { | ||||
|     //private string $table = 'jobs';
 | ||||
|     protected static IJobQuery $query; | ||||
|     public int $id; | ||||
|     public float $budget; | ||||
|     public static function Initialize() { | ||||
|         if (self::$query === null) { | ||||
|             self::$query = new JobQuery($this); | ||||
|         } | ||||
|     } | ||||
|     public static function GetLast10() { | ||||
|         return self::QueryAll(self::$query->GetLast10()); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,9 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace App\Query; | ||||
| 
 | ||||
| use Fufle\ORM\IQuery as IBaseQuery; | ||||
| 
 | ||||
| interface IJobQuery extends IBaseQuery { | ||||
|     public function GetLast10(): string; | ||||
| } | ||||
|  | @ -0,0 +1,12 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace App\Query; | ||||
| 
 | ||||
| use App\Query\IJobQuery; | ||||
| use Fufle\ORM\Query as BaseQuery; | ||||
| 
 | ||||
| class JobQuery extends BaseQuery implements IJobQuery { | ||||
|     public function GetLast10() { | ||||
|         return "select * from jobs order by id desc limit 10"; | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,27 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace Fufle\Database; | ||||
| 
 | ||||
| use PDO; | ||||
| 
 | ||||
| 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') { | ||||
|         $stmt = self::$connection->prepare($query); | ||||
|         $stmt->execute($params); | ||||
|         $stmt->setFetchMode(PDO::FETCH_CLASS, $output); | ||||
|         return $stmt->fetch(); | ||||
|     } | ||||
| 
 | ||||
|     public static function QueryAll(string $query, array|object $params = [], string $output = 'stdObject') { | ||||
|         $stmt = self::$connection->prepare($query); | ||||
|         $stmt->execute($params); | ||||
|         $stmt->setFetchMode(PDO::FETCH_CLASS, $output); | ||||
|         return $stmt->fetchAll(); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,10 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace Fufle\ORM; | ||||
| 
 | ||||
| interface IQuery { | ||||
|     public function Get(): string; | ||||
|     //public function Insert(): string;
 | ||||
|     //public function Update(): string;
 | ||||
|     public function Delete(): string; | ||||
| } | ||||
|  | @ -0,0 +1,48 @@ | |||
| <?php | ||||
| 
 | ||||
| namespace Fufle\ORM; | ||||
| 
 | ||||
| use Fufle\Database\ConnectionManager; | ||||
| 
 | ||||
| abstract class Model { | ||||
|     protected static string $primaryKey = 'id'; | ||||
|     protected static ?string $table = null; | ||||
|     protected static ?IQuery $query = null; | ||||
|      | ||||
|     public function getTableName() { | ||||
|         return static::$table; | ||||
|     } | ||||
|      | ||||
|     public function getPrimaryKey() { | ||||
|         return static::$primaryKey; | ||||
|     } | ||||
|      | ||||
|     public static function Get(int $id) { | ||||
|         return self::Query( | ||||
|             static::$query->Get(), | ||||
|             [$id]); | ||||
|     } | ||||
|      | ||||
|     protected static function Query($sql, $params) { | ||||
|         self::Initialize(); | ||||
|         return ConnectionManager::Query( | ||||
|             $sql, | ||||
|             $params, | ||||
|             get_called_class()); | ||||
|     } | ||||
|      | ||||
|     protected static function QueryAll($sql, $params) { | ||||
|         self::Initialize(); | ||||
|         return ConnectionManager::QueryAll( | ||||
|             $sql, | ||||
|             $params, | ||||
|             get_called_class()); | ||||
|     } | ||||
|      | ||||
|     abstract public static function Initialize() { | ||||
|         if (static::$table === null) { | ||||
|             static::$table = basename(get_called_class()) . 's'; | ||||
|         } | ||||
|         static::Initialize(); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,20 @@ | |||
| <?php | ||||
| namespace Fufle\ORM; | ||||
| 
 | ||||
| class Query { | ||||
|     private string $table; | ||||
|     private string $primaryKey; | ||||
|     public function __construct(Model $model) { | ||||
|         $this->table = $model->getTableName(); | ||||
|         $this->primaryKey = $model->getPrimaryKey(); | ||||
|     } | ||||
|     public function Get(): string { | ||||
|         return 'SELECT * FROM '.$this->table.' WHERE '.$this->primaryKey.' = ?'; | ||||
|     } | ||||
| 
 | ||||
|     //public function Insert(): string;
 | ||||
|     //public function Update(): string;
 | ||||
|     public function Delete(): string { | ||||
|         return 'DELETE FROM '.$this->table.' WHERE '.$this->primaryKey.' = ?'; | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,16 @@ | |||
| <?php  | ||||
| require_once __DIR__ . '/../vendor/autoload.php'; | ||||
| 
 | ||||
| use Fufle\Database; | ||||
| 
 | ||||
| echo SayHello::world(); | ||||
| 
 | ||||
| $dns = 'pgsql:host=localhost;port=5432;dbname=dynamic_dev;user=test;password=pass123'; | ||||
| ConnectionManager::Connect($dns); | ||||
| echo " | ||||
| 
 | ||||
| ";
 | ||||
| var_dump(Job::Get(10)); | ||||
| echo " | ||||
| 
 | ||||
| ";
 | ||||
		Loading…
	
		Reference in New Issue