Bonjour,

Voila je rencontre un petit problème avec mon code.

Je code le framework du cours d'oPenclassrooms (sans faire de pub).

J'obtiens cette erreur :

Fatal error: Uncaught Error: Call to a member function setDateAjout() on array in /var/www/html/Framework/Library/Models/ArticlesManagerPDO.php:43 Stack trace: #0 /var/www/html/Framework/Apps/Frontend/Modules/Articles/ArticlesController.php(14): Library\Models\ArticlesManagerPDO->getList(0, 5) #1 /var/www/html/Framework/Library/BackController.php(35): Apps\Frontend\Modules\Articles\ArticlesController->executeIndex(Object(Library\HTTPRequest)) #2 /var/www/html/Framework/Apps/Frontend/FrontendApplication.php(19): Library\BackController->execute() #3 /var/www/html/Framework/Web/Bootstrap.php(31): Apps\Frontend\FrontendApplication->run() #4 {main} thrown in /var/www/html/Framework/Library/Models/ArticlesManagerPDO.php on line 43

Je ne comprends pas du tout pourquoi c'est un tableau qui est renvoyé et pas un objet vu ce code :

<?php

namespace  Library\Models;

use \Library\Entities\Articles;

class ArticlesManagerPDO extends ArticlesManager

{

  public function getList($debut = -1, $limite = -1)

  {

    $sql = 'SELECT id, auteur, titre, contenu, dateAjout, dateModif FROM news ORDER BY id DESC';

    if ($debut != -1 || $limite != -1)

    {

      $sql .= ' LIMIT '.(int) $limite.' OFFSET '.(int) $debut;

    }

    $requete = $this->dao->query($sql);

    $requete->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\Entities\Articles');

    $listeNews = $requete->fetchAll();

    foreach ($listeNews as $news)

    {

      $news->setDateAjout(new \DateTime($news->dateAjout()));

      $news->setDateModif(new \DateTime($news->dateModif()));

    }

    $requete->closeCursor();

    return $listeNews;

  }

}

Je vous remercie par avance de votre aide :)

2 réponses


Je suis pas sur que le forum de Grafikart soit la meilleure aide m'enfin, tu as aussi posté sur le forum d'OpenClassroom j'imagine.

Sinon à quoi correspond $this->doa ?

Bonjour,
tu retournes un fetchall, cette fonction retourne un array. Du coup c'est normal.
tu souhaites surement faire appel à l'un des éléments "en dessous", soit via un foreach, soit tu appelles fetch et non fetchall pour avoir le premier élément (si il ne t'en faut qu'un).