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 !
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