171 lines
4.9 KiB
PHP
171 lines
4.9 KiB
PHP
<?php
|
|
|
|
namespace App\Domain;
|
|
|
|
use App\Domain\Recettes\Recette;
|
|
use App\Kernel;
|
|
use PDO;
|
|
|
|
/**
|
|
* Classe abstraite avec des méthodes pour pouvoir gérer les liens entre le site et la base de données.
|
|
*/
|
|
abstract class Repository {
|
|
|
|
/**
|
|
* Instancie des éléments de cette classe par rapport au repository.
|
|
* @return class-string
|
|
*/
|
|
abstract public static function getEntity(): string;
|
|
|
|
/**
|
|
* Doit retourner une liste du type :
|
|
* ['table' => '', 'columns' => [ ...Liste des colonnes dans la BDD ] ].
|
|
* @return array
|
|
*/
|
|
abstract public static function getStructure(): array;
|
|
|
|
/**
|
|
* Contient le nom de la table principale du repo.
|
|
* @var string|mixed
|
|
*/
|
|
final public string $tableName;
|
|
|
|
/**
|
|
* Contient le nom des colonnes de la table du repo.
|
|
* @var array|mixed
|
|
*/
|
|
final public array $tableColumns;
|
|
|
|
/**
|
|
* Contient les mêmes données que getStructure().
|
|
* @var array
|
|
*/
|
|
public private(set) array $globalStructure;
|
|
|
|
/**
|
|
* Constructeur.
|
|
* Reprend les informations de getStructure et les met dans des attributs.
|
|
*/
|
|
public function __construct(){
|
|
$structure = static::getStructure();
|
|
|
|
$this->tableName = $structure['table'];
|
|
$this->tableColumns = $structure['columns'];
|
|
$this->globalStructure = $structure;
|
|
}
|
|
|
|
/**
|
|
* Permet d'avoir tous les éléments correspondant à la requête passée en paramètre.
|
|
*
|
|
* @param string $sqlQuery
|
|
* @param bool $asArray Permet de savoir si on veut que le retour soit une array ou bien un tableau de Model.
|
|
* @return array|null
|
|
*/
|
|
public function selectGetAll( string $sqlQuery, bool $asArray = false ): ?array {
|
|
$statement = Kernel::$DB->pdo->prepare( $sqlQuery );
|
|
if( !$statement->execute() )
|
|
return null;
|
|
|
|
if( $asArray )
|
|
$results = $statement->fetchAll( PDO::FETCH_ASSOC );
|
|
else
|
|
$results = $statement->fetchAll( PDO::FETCH_CLASS, static::getEntity() );
|
|
if( empty( $results ) )
|
|
return null;
|
|
return $results;
|
|
}
|
|
|
|
/**
|
|
* Permet d'ajouter une entité à la base de données.
|
|
*
|
|
* @param Model $entity
|
|
* @return bool
|
|
*/
|
|
public function addEntity( Model $entity ): bool {
|
|
|
|
$query = "INSERT INTO {$this->tableName} (";
|
|
$values = "(";
|
|
foreach( $this->tableColumns as $column ) {
|
|
$query .= "`{$column}`,";
|
|
$values .= ":{$column},";
|
|
}
|
|
$query = substr( $query, 0, -1 ) . ")";
|
|
$values = substr( $values, 0, -1 ) . ")";
|
|
$query .= " VALUES " . $values . ";";
|
|
|
|
$statement = Kernel::$DB->pdo->prepare( $query );
|
|
foreach( $this->tableColumns as $column ) {
|
|
$statement->bindValue(":{$column}", $entity->{$column} );
|
|
}
|
|
|
|
return $statement->execute();
|
|
}
|
|
|
|
/**
|
|
* Permet de mettre à jour les informations de l'entité dans la base de données.
|
|
*
|
|
* @param Model $entity
|
|
* @param string $identifier
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function updateEntity( Model $entity, string $identifier ): bool {
|
|
$query = "UPDATE {$this->tableName} SET ";
|
|
foreach( $this->tableColumns as $column ) {
|
|
$query .= "`{$column}` = :{$column},";
|
|
}
|
|
$query = substr( $query, 0, -1 ) . " WHERE {$identifier} = :{$identifier};";
|
|
|
|
$statement = Kernel::$DB->pdo->prepare( $query );
|
|
foreach( $this->tableColumns as $column ) {
|
|
$statement->bindValue(":{$column}", $entity->{$column} );
|
|
}
|
|
$statement->bindValue( ":{$identifier}", $entity->{$identifier} );
|
|
return $statement->execute();
|
|
}
|
|
|
|
/**
|
|
* Permet de supprimer une entrée d'entité dans la base de données.
|
|
*
|
|
* @param Model $entity
|
|
* @param string $identifier
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function deleteEntity( Model $entity, string $identifier ): bool {
|
|
$query = "DELETE FROM {$this->tableName} WHERE {$identifier} = :{$identifier};";
|
|
$statement = Kernel::$DB->pdo->prepare( $query );
|
|
$statement->bindValue( ":{$identifier}", $entity->{$identifier} );
|
|
return $statement->execute();
|
|
}
|
|
|
|
/**
|
|
* Fonction raccourcie pour préparer les champs nécessaires pour addEntity.
|
|
*
|
|
* @param Model $entity
|
|
*
|
|
* @return bool
|
|
*/
|
|
abstract public function add( Model $entity ): bool;
|
|
|
|
/**
|
|
* Fonction raccourcie pour préparer les champs nécessaires pour updateEntity
|
|
*
|
|
* @param Model $entity
|
|
*
|
|
* @return bool
|
|
*/
|
|
abstract public function update( Model $entity ): bool;
|
|
|
|
/**
|
|
* Fonction raccourcie pour préparer les champs nécessaires pour deleteEntity
|
|
*
|
|
* @param Model $entity
|
|
*
|
|
* @return bool
|
|
*/
|
|
abstract public function delete( Model $entity ): bool;
|
|
|
|
|
|
}
|