Call to a member function on array

Par zbrzbr, il y a 7 ans


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

Gorgio, il y a 7 ans

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 ?

eltharin, il y a 6 ans

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).