Bonjour à tous,

J'ai un petit soucis de compréhension concernant les associations dans CakePHP lorsque l'on veut restreindre sa requête. Je m'explique :

Voici d'une grande beauté le contenu de deux tables :

Types_Evenement

id_type_evenement
libelle

Evenements

id_evenement
type_evenement_id
(...)

J'aimerais pouvoir créer un model Pyrotechnie, par exemple, qui me permettrait d'avoir tout mes évènements dont Types_Evenement.libelle = 'pyrotechnie'.

Pyrotechnie.php

<?php
class Pyrotechnie extends AppModel {
    public $useTable = 'types_evenement';
    public $primaryKey = 'id_type_evenement';
    public $hasMany = array(
        'Evenement' => array(
            'foreignKey' => 'type_evenement_id',
        )
    );
}

Evenement.php

<?php
class Evenement extends AppModel {
    public $belongsTo = array('Pyrotechnie');
}

Enfin même en lisant la doc, en aillant bidouiller et re-bidouiller, je suis totalement perdu.
Si quelques veut bien m'aider, je lui serais très reconnaissant.

Merci beaucoup !

2 réponses


Bonsoir.
Pourquoi tu ne les appelles tout simplement pas comme ça :

Types
----------------------
id
libelle
Evenements
------------------
id
(...)
type_id

Je ne vois pas pourquoi tu mets d'underscores supplémentaires, alors que tu ne sembles pas avoir de table entre ces deux tables là.
Et au cas où tu ne le sache pas, dans l'utilisation de table intermédiaire, il faut mettre les tables dans le nom de la table de liaison, par ordre alphabétique croissant, ce qui dans ton cas aurait été :

evenements_types

Bonsoir,

Merci pour ta réponse rapide.
En réponse :

Tout simplement parce qu'en BD je suis une convention que j'utilise toujours à savoir :
clef primaire : id_<nom de la table>
clef étrangère : <nom de la table>_id

Pour la partie BD je ne suis pas les conventions de CakePHP. Je fais comme j'ai toujours fait.

J'aimerais juste que mon model Pyrotechnie me retourne le résultat de cette requete par exemple :

SELECT *
FROM Evenements e INNER JOIN Types_Evenement te
ON e.type_enement_id = te.id_type_evenement
WHERE te.libelle = 'pyrotechnie'

J'ai cru comprendre que la clef 'conditions' du tableau de l'attribut hasMany ou belongsTo etc... d'un model pouvait se traduire par le même tableau que l'on passe en paramètre de la fonction find('all', array()) par exemple.
J'espère être clair :/

Merci