'', 'columns' => [ ...Liste des colonnes dans la BDD ] ]. * @return array */ abstract public static function getStructure(): array; final public string $tableName; final public array $tableColumns; public function __construct(){ $structure = static::getStructure(); $this->tableName = $structure['table']; $this->tableColumns = $structure['columns']; } /** * Permet d'avoir tous les éléments correspondant à la requête passée en paramètre. * * @param string $sqlQuery * @return array|null */ public function selectGetAll( string $sqlQuery ): ?array { $statement = Kernel::$DB->pdo->prepare( $sqlQuery ); if( !$statement->execute() ) return null; $results = $statement->fetchAll( PDO::FETCH_CLASS, static::getEntity() ); if( empty( $results ) ) return null; return $results; } 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(); } 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(); } 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(); } abstract public function add( Model $entity ): bool; abstract public function update( Model $entity ): bool; abstract public function delete( Model $entity ): bool; }