Bonjour,
Je suis sur l'apprentissage du PDO MVC etc...
Je sui sur le re-création de mon système que j'avais déjà fait et je suis bloquer car je ne sais pas comment utiliser foreach j'ai pris l'abitude avec les while.
Donc je récupére mes catégories et les forums dans cette catégorie.
Dans un premier temps je liste mes catégorie jusque la c'est bon
foreach(Categories::getCategories() as $cats):
ensuite je veut récupéré les forum dans cette catégorie
//dans ma class Database
public function boucle($statement,$attr){
$req = $this->getPDO()->prepare($statement);
$req->execute($attr);
$datas = $req->fetch();
return $datas;
}
//dans ma class ViewForums
public static function catForums($id){
return App::getDB()->boucle("SELECT * FROM ".static::getTable()." WHERE categorie_id = ?",[$id], get_called_class());
}
//dans la vue
$forum = [ViewForums::catForums($cats->id)];
foreach($forum as $forums):
Je veut listé les forums dans chaque catégorie ou il est assigné
ça ne fonctione pas comme je veut je ne récupère qu'un seul forum par cétégorie alors que je souhaite tous les listé, j'ai tester fetchall fetchobject etc... rien n'y fait.
J'avais fini mon forum mais je souhaite un code plus souple et aussi apprendre mai cette boucle me bloque, et elle me sera utile souvent.
D'alleur si vous savez comme je peut faire un while car j'ai tester ça ne fonctionne pas ça mouline.
voila merci.
Bon après moulte test je suis parvenur a faire ce que je voulais :
Ma nouvel fonction
function catForum($statements,$attr){
$req = $this->getPDO()->prepare($statements);
$req->execute($attr);
$datas = [];
while($rows = $req->fetchObject()){
$datas[] = $rows;
}
return $datas;
}
public static function catForums($id){
return App::getDB()->catForum("SELECT * FROM ".static::getTable()." WHERE categorie_id = ?",[$id], get_called_class());
}
Je peut donc ainsi faire mon foreach de cette façon sans passer par un tableau :
foreach(ViewForums::catForums($cats->id) as $forum):
Voila je poste quand même pour savoir ou j'en suit et si quelqu'un a le même soucis, car j'ai suivis le tuto de Grafikart.
Mai c'est quand même embêtant de devoir faire plusiuer fonction pour géré plusieur cas.
Salut,
Pourrais tu essayer de remplacer neecride:
$datas = $req->fetch();
par
$datas = $req->fetchAll();
De mémoire il me semble que fetch() ne récupère qu'une seul ligne et fetchAll() plusieurs lignes
Hello ,
Déjà un peu de doc ne fait pas de mal : Boucle foreach
En gros tu dois comprendre que l'argument sur lequel tu veux boucler doit être de type tableau.
La différence entre un while est un foreach est qu'un while c'est une boucle "TANT QUE" la condition est vrai et un foreach on sait combien de fois la boucle va boucler car on sait combien d'élément on a avant de boucler. (Ca fait bizarre dit comme ça mais l'idée est la)
(Après effectivement le commentaire du dessus est vrai. Un fetchall() en PDO renvoie un tableau de tous les éléments enregistrés)
la doc du fetchall .
Du coup, dans le nom de tes variables pour que tu puisses comprendre doit être un truc comme ça :
J'ai mis le "S" en majuscule pour te dire que tu as une variable contenant de multiple données, et que tu cherches une donnée en particulier quand tu fais un foreach.
//On récupère un tableau avec la liste des forums
$forumS = [ViewForums::catForums($cats->id)];
//On regarde sur chaque élément du tableau donc dans le tableau des forumS, on veut les infos relatif à un forum
// Ce qui donne :
foreach($forumS as $forum):
brelandas Oui j'ai déja tester j'ai même fais une fonction qui gere les deux cas.
Kaelyscius Justement je l'ai lu cette doc (qui n'aide pas un débutant) elle ne m'aide pas a comprendre pourquoi le foreach ne me retourne pas tous les forum qui sont lié au catégorie
De plus j'ai aussi tester le fetchAll ça ne fonctionne pas pour autant j'ai une erreur SQLSTATE
public function prepare($statement, $attr, $uniq = false){
$req = $this->getPDO()->prepare($statement);
$req->execute($attr);
if($uniq){
$datas = $req->fetch();
}else{
$datas = $req->fetchAll();
}
return $datas;
}
Donc je fais bien un prepare et un execute de l'id qui est l'id de mes catégorie donc cat = 1 => forum_id = 1
je ne vois vraiment pas ce qui cloche.