Bonjour,

J'ai un bug tres etrange et tres enervant en ce moment…
Je passe les details de la création de ce petit site perso, en gros j'ai des films qui ont plusieurs genres et l'inverse, un genre pouvant etre action, thriller, comedie… je cherche actuellement à pouvoir trouver les films d'un certain genre, facile :

// Dans GendersController
public function show($id, $slug) {
    $this->Gender->id = $id;
    if (!$this->Gender->exists())
        throw new NotFoundException('Ce genre de fiml n\'existe pas');

    $d'gender'] = $this->Gender->read();
    if ($d'gender']'Gender']'slug'] != $slug)
        $this->redirect($d'gender']'Gender']'link-show'], 301);

    $this->set($d);
}

Mes relations sont à priori correctes puisque j'ai généré mes modeles avec la console et que cake m'a tout trouvé correctement
Regardez le code SQL qui est généré et que je n'arrive absolument pas à expliquer :

SELECT `Film`.`id`, `Film`.`name`, `Film`.`slug`, `Film`.`created`, `Film`.`rating`, `Film`.`duration`, `Film`.`director_id`, `Film`.`synopsis`, `Film`.`head`, `FilmsGender`.`id`, `FilmsGender`.`name`, `FilmsGender`.`slug` FROM `films`.`films` AS `Film` JOIN `films`.`films_genders` AS `FilmsGender` ON (`FilmsGender`.`gender_id` = 1 AND `FilmsGender`.`film_id` = `Film`.`id`)

Si vous regardez bien, il cherche à récupérer les valeurs des champs name et slug de la table films_genders or, ils n'existent pas (c'est la table de liaison) et qu'a aucun moment il ne consulte la table genders…

Notez que j'ai d'autres liaisons HABTM autour de ma table films et que toutes ces autres relations fonctionnent parfaitement !
J'ai également de temps en temps le probleme lorsque je regarde la fiche d'un film : il me donne l'erreur, je rafraichi quelques fois et bim ca fonctionne.

Voila, si vous voulez des infos en plus :)

3 réponses


Tu as un petit UML pour qu'on comprenne ta base de donnée ?

Flohw
Auteur

j'ai ca en rayon :)

Salut, essaie de faire :

public function show($id, $slug) {
    $this->loadModel('Gender');
    $gender = $this->Gender->find('first', array(
        'conditions' => array(
            'Gender.id' => $id,
            'Gender.slug' => $slug
        )
    ));
    if (empty($gender))
        throw new NotFoundException('Ce genre de fiml n\'existe pas');

    if ($gender'Gender']'slug'] != $slug)
        $this->redirect($gender'Gender']'link-show'], 301);

    $this->set(compact('gender'));
}