'', '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; }