Algorithme et requètes

Par Codekiller49, il y a 11 ans


Bonjour :)

Je rencontre actuellement un problème pour la création de mon site.

Je stocke dans ma BDD des catégories et des sous-catégories de cette manière :

--
-- Structure de la table `categories`
--
CREATE TABLE IF NOT EXISTS `categories`(
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `name` varchar(100) NOT NULL,
    PRIMARY KEY (`id`)
);
--
-- Structure de la table `subCategories`
--
CREATE TABLE IF NOT EXISTS `subcategories`(
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `category_id` int(10) NOT NULL, 
    `name` varchar(100) NOT NULL,
    PRIMARY KEY (`id`)
);

Chaque sous-catégorie dépendant d'une catégorie je voudrais afficher dans ma vue quelque chose de cette forme :

CATEGORY 1 :

-> Subcategory 1.1
-> Subcategory 1.2
-> Subcategory 1.3

CATEGORY 2 :

-> Subcategory 2.1

CATEGORY 3 :

-> Subcategory 3.1
-> Subcategory 3.2

etc ...

J'ai donc effectué ceci dans mon controller:

<?php

    $categories = $this->Category->find('list', array(
        'fields' => array('Category.name'),
        'order' => array('Category.name')
        ));
        $this->set(compact('categories')); // On les envoit à la vue.

        $this->loadModel('Subcategory');
        $subcategories = $this->Subcategory->find('all', array(
        'fields' => array('Subcategory.name'),
        'order' => array('Subcategory.name')
        ));
        $this->set(compact('subcategories')); // On les envoit à la vue.

?>

Et ceci dans ma vue :

<?php
<?php
foreach ($categories AS $category) //On affiche les catégories
{
     echo "<h4>".$category."</h4>"; 

        foreach($subcategories AS $subcategory)
        {
            if($subcategory'category_id'] == $category'id']) //On affiche les sous catégorie correspondante aux catégories
            {?>
                <li><?php echo $this->Html->link($subcategory'name'], array('action' => 'topics', 'controller' =>'Courses', $subcategory'name'])); ?></li>
            <?php
        }
        }
    ?>

<?php
}
?>
?>

Malheureusement j'ai ces jolis messages d'erreur qui s'affichent pour chaque catégorie ...

Warning (2): Illegal string offset 'category_id' [APP\View\Courses\index.ctp, line 13]
Warning (2): Illegal string offset 'id' [APP\View\Courses\index.ctp, line 13]
Warning (2): Illegal string offset 'category_id' [APP\View\Courses\index.ctp, line 13]
Warning (2): Illegal string offset 'id' [APP\View\Courses\index.ctp, line 13]

Pourtant j'ai bien précisé "all" dans ma requète, je ne comprends pas ...

2 réponses

djtec, il y a 11 ans

Normal dans ton find tu demande seulement le champ Subcategory.name dans fields donc met aussi Subcategory.id et Subcategory.category_id ou ne met rien vu que tu veux tout les champs

Codekiller49, il y a 11 ans

En effet cela fonctionne désormais, j'avais été trop vite dans mes relectures et n'avais pas vu cette erreur.

Merci beaucoup ! :)

Résolu ;)