Je veux un objet, mais je récupère un array

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Je veux un objet, mais je récupère un array

Re: Je veux un objet, mais je récupère un array

par Saian » 16 nov. 2018, 10:56

Salut, j'ai répondu un peu vite hier. ^^

Je n'ai pas l'habitude d'utiliser PDO directement et quand je m'en suis servi j'ai plutôt utilisé des requêtes préparées et le comportement doit être différent avec l'utilsiation de query.
Le setFetchMode n'est probablement pas pris en compte, comme le suggère mineyou, pour une raison pas forcément très clair au premier abord.

Tu peux essayer de passer les paramètres directement dans la méthode query :
public PDOStatement PDO::query ( string $statement , int $PDO::FETCH_CLASS , string $classname , array $ctorargs )
http://php.net/manual/fr/pdo.query.php

ou sur le fetchAll :
public array PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )
http://php.net/manual/fr/pdostatement.fetchall.php

En tout cas, s'en m'être attardé des heures sur la documentation, je n'ai pas vu d'exemple utilisant la même suite de méthodes que dans ton code.

Re: Je veux un objet, mais je récupère un array

par mineyou » 15 nov. 2018, 19:22

salut, peut tu faire un var_dump sur la ligne :

Code : Tout sélectionner

$requete->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\Entities\Articles');
si elle a bien fonctionnné elle devrait renvoyer true sinon false

Mais vu qu'il te renvoie des tableau comme fetchAll() le fait de base c'est qu'il doit y avoir un problème avec un de ces réglages

Re: Je veux un objet, mais je récupère un array

par Saian » 15 nov. 2018, 11:43

Salut, on ne voit pas le code en erreur donc difficile de tirer une conclusion ferme mais le code montré te retourne un tableau d'objets et non pas un objet d'objets :mrgreen:

Je veux un objet, mais je récupère un array

par JulienRNSNeo » 15 nov. 2018, 10:23

Bonjour,
dans le cadre d'un exercice je développe un mini framework PHP. C'est pas évident.

Voyez cette erreur quand je lance mon appli :
array(1) { [0]=> array(12) { ["id"]=> string(1) "1" [0]=> string(1) "1" ["auteur"]=> string(6) "Julien" [1]=> string(6) "Julien" ["titre"]=> string(17) "Ceci est un essai" [2]=> string(17) "Ceci est un essai" ["contenu"]=> string(16) "Et pas un essaim" [3]=> string(16) "Et pas un essaim" ["dateAjout"]=> string(19) "2018-11-28 00:00:00" [4]=> string(19) "2018-11-28 00:00:00" ["dateModif"]=> string(19) "2018-11-15 00:00:00" [5]=> string(19) "2018-11-15 00:00:00" } } array(12) { ["id"]=> string(1) "1" [0]=> string(1) "1" ["auteur"]=> string(6) "Julien" [1]=> string(6) "Julien" ["titre"]=> string(17) "Ceci est un essai" [2]=> string(17) "Ceci est un essai" ["contenu"]=> string(16) "Et pas un essaim" [3]=> string(16) "Et pas un essaim" ["dateAjout"]=> string(19) "2018-11-28 00:00:00" [4]=> string(19) "2018-11-28 00:00:00" ["dateModif"]=> string(19) "2018-11-15 00:00:00" [5]=> string(19) "2018-11-15 00:00:00" }
Fatal error: Uncaught Error: Call to a member function setContenu() on array in /var/www/html/Framework/Apps/Frontend/Modules/Articles/ArticlesController.php:18 Stack trace: #0 /var/www/html/Framework/Library/BackController.php(35): Apps\Frontend\Modules\Articles\ArticlesController->executeIndex(Object(Library\HTTPRequest)) #1 /var/www/html/Framework/Apps/Frontend/FrontendApplication.php(19): Library\BackController->execute() #2 /var/www/html/Framework/Web/Bootstrap.php(36): Apps\Frontend\FrontendApplication->run() #3 {main} thrown in /var/www/html/Framework/Apps/Frontend/Modules/Articles/ArticlesController.php on line 18
Comme vous le voyez c'est un array qui m'est retourné. Alors que j'ai le code suivant qui est censé me renvoyer des objets :
<?php

namespace  Library\Models;

use \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);
[b]    $requete->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\Entities\Articles');[/b]
    $listeNews = $requete->fetchAll();

    var_dump($listeNews);

    foreach ($listeNews as $news)

    {
var_dump($news);

    }

    

    $requete->closeCursor();

    

    return $listeNews;

  }

}
Du coup cela m'empêche d'appliquer des méthodes...
Si vous avez une idée sur la question, je vous remercie par avance de votre aide.