J'écris mon propre ORM simplement en utilisant PDO. Ma question est de savoir si vous pouvez forcer la méthode PDOStatement::fetchAll()
à renvoyer un tableau d'objets de stdClass? Par exemple:
$result = $q->fetch_all(/* some magic here */);
print_r($result);
Devrait imprimer quelque chose comme:
Array
(
[0] => stdClass Object
(
[NAME] => pear
[COLOUR] => green
)
[1] => stdClass Object
(
[NAME] => watermelon
[COLOUR] => pink
)
)
Est-ce que c'est possible? NAME et COLOR sont bien sûr des noms de colonnes. J'ai lu la documentation mais je n'ai rien trouvé d'intéressant.
Utilisez $result = $q->fetchAll(PDO::FETCH_OBJ);
Cela va le faire:
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $q->fetchAll(PDO::FETCH_OBJ);
//$result contains an array of stdObjects
?>
Cependant, le moyen le plus cool consiste à faire en sorte que PDO instancie votre propre classe et remplisse les propriétés pour vous:
Exemple # 4 Instanciation d'une classe pour chaque résultat
L'exemple suivant illustre le comportement du style d'extraction PDO :: FETCH_CLASS.
<?php
class fruit {
public $name;
public $colour;
}
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit");
//$result contains an array of fruit objects
?>
Source: http://www.php.net/manual/en/pdostatement.fetchall.php
Vous devriez aussi pouvoir faire ce qui suit:
$stmt->setFetchMode(PDO::FETCH_OBJ); //set the mode for all fetch request
Avec toute requête fetch
ultérieure, vous pouvez omettre de spécifier explicitement le mode.
$stmt->setFetchAll(); //returns an array of objects