Salut la communauté en espérant que vous aller tous bien...
J'ai un soucis au niveau d'un projet je sais pas ou est le soucis.
je voulais refactoring la page category de
mon projet un peux histoir d'alleger le projet un peux
Voila le code

$id = (int)$params['id'];
$slug = $params['slug'];

/* --- CATEGORY --- */
$pdo = Db::getPDO();
$query = $pdo->prepare('SELECT * FROM category WHERE id = :id');
$query->execute(['id' => $id]);
$query->setFetchMode(PDO::FETCH_CLASS, Category::class);
$category = $query->fetch();
/** @var Category |false */

if($category === false){
    throw new \Exception("Aucun article ne correspond pas");
}

if($category->getSlug() !== $slug){
    $url = $router->url('category', ['slug' => $category->getSlug(), 'id' => $id]);
    http_response_code(301);
    header('Location: ' . $url);
}

/* --- LISTE ---*/
$query = $pdo->prepare('
    SELECT *
    FROM sous_categorys s
    JOIN category c ON s.cates_id = c.category_prod
    WHERE s.cates_id = c.category_prod
');
$query->execute(['id' => $category->getId()]);
$query->setFetchMode(PDO::FETCH_CLASS, Categories_link::class);
$categories_link = $query->fetchAll();

/* --- NAME CAT --- */
$title = "{$category->getName()}";

/* --- PAGINATION --- */
$paginatedQuery = new PaginatedQuery(
    "SELECT p.* 
    FROM product p
    JOIN product_category pc ON pc.product_id = p.id
    WHERE pc.category_id = {$category->getID()}
    ORDER BY created_at DESC",
    "SELECT COUNT(category_id) FROM product_category WHERE category_id = {$category->getID()}"
);
$products = $paginatedQuery->getItems(Product::class);
dd($products);

La page des parametre et les methodes

namespace App;

use \PDO;

class PaginatedQuery{

    private $query;
    private $queryCount;
    private $classMapping;
    private $pdo;
    private $perPage;

    public function construct(
        string $query,
        string $queryCount,
        string $classMapping,
        ?\PDO $pdo = null,
        int $perPage = 12
    )
    {
        $this->query = $query;
        $this->queryCount = $queryCount;
        $this->classMapping = $classMapping;
        $this->pdo = $pdo ?: Db::getPDO();
        $this->perPage = $perPage;
    }

    public function getItems(): array
    {
        $currentPage = URL::getPositiveInt('page', 1);
        $count = (int)$this->pdo
            ->query($this->queryCount)
            ->fetch(PDO::FETCH_NUM)[0];
        $pages = ceil($count / $this->perPage);
        if($currentPage > $pages){
            throw new \Exception('Cette page n\'existe pas');
        }
        $offset = $this->perPage * ($currentPage - 1);
        return $this->pdo->query(
            $this->query . 
            " LIMIT {$this->perPage} OFFSET $offset")
            ->fetchAll(PDO::FETCH_CLASS, $this->classMapping);
    }
}

Voila l'erreur que je reçois, je comprends pas du tout le probeme

Call to a member function query() on null

Veuillez m'aider a comprendre svp
Merci

7 réponses


Nb: Je suis nouveau sur le domaine
Merci...

Bonjour,
Un titre très explique qui aide a comprendre le problème du post....
Si tu as que cela comme erreur, difficile de t'aider plus.
Active les erreurs PDO
Un coup tu fais "$category->getId()" et après tu fais "$category->getID()", surement de la que viens le problème

Merci de m'avoir répondu,
Désolé pour le titre sa fait 4 jours que j'ai pas dormis a cause de ce projet 😂
Non je crois pas que l'erreur viens de la, j'ai tout modifier

et alors qu'elle est l'erreur exacte ?

l'erreur viens de la "->query($this->queryCount)" mais je comprends pas du tout

as-tu bien activer les erreurs PDO comme demandé ?

trop fort cest coll