J'ai une table appelée catégories. Le tableau contient des catégories et de leurs catégories Sub (Subsub) ... P>
C'est une table facile: p>
De cette façon, je peux faire des catégories avec une profondeur sans fin ... j'espérais un peu que Cakephp comprendrait Parent_id (j'ai également essayé catégorie_id, mais cela rend CakePHP Rejoindre sur lui-même: D) P>
Quelle est la bonne façon de s'attaquer à cela? P>
Remarque: il y a aussi une table "beaucoup à beaucoup" appelée des endroits. Ces endroits peuvent appartenir à une ou plusieurs catégories. P>
6 Réponses :
Dans la catégorie Modèle: Enfants d'appartenance des parents et de Hasmany, les deux ont la catégorie «Catégorie» et la clé étrangère «Parent_id ' P>
regarder le comportement de l'arborescence ; avec la logique MPTT. Le lien fourni sur le site Web d'Oracle est mort; Mais vous pouvez trouver un tas de matériaux sur la façon de l'utiliser sur le manuel de gâteau et Online . Juste faire Bien sûr, votre table correspond à cette structure pour obtenir de meilleurs résultats dans le gâteau et sa cuisson. P> p>
Merci mec, des choses intéressantes et en effet exactement ce dont j'ai besoin. Tout est mis en place en douceur!
Dans beaucoup d'instances, cela est surchargé. Une simple table d'auto-référencement mentionnée ci-dessous par ANH Pham avec les associations appropriées est plus que suffisante dans la majorité des causes. Le comportement des arbres devient de plus en plus utile car les niveaux de "profondeur" vont au-delà au niveau (c.-à-d. Les enfants peuvent avoir des enfants).
Le comportement des arbres est surchargé pour cette situation. Il vous suffit de définir votre modèle comme celui-ci:
class Category extends AppModel { public $hasMany = array( 'Children'=>array( 'className'=>'Category', 'foreignKey'=>'parent_id' ) ); public $belongsTo = array( 'Parent'=>array( 'className'=>'Category', 'foreignKey'=>'parent_id' ) ); }
Hey Richard, je cherchais le comportement de l'arbre, mais je suis d'accord que cela peut être surchargé. De toute façon. Merci d'avoir souligné cela!
Merci! C'est très simple quand il est clairement illustré!
question connexe - suppose que j'ai une hiérarchie auto-référencée de 3 niveaux mise en œuvre comme indiqué par @Richardathome - je comprends quand j'essaie de trouver une catégorie particulière, cela me fera également la catégorie des parents et toutes les catégories d'enfants. Cependant, comment puis-je le faire trouver le chemin de retour à la racine? Y a-t-il un aspect propre pour accomplir cela ou nécessitera un hack personnalisé? P>
J'imagine à utiliser ceci dans un scénarios où la table des produits est associée à une pièce d'identité de catégorie, mais lorsqu'il affiche aux utilisateurs, je voudrais également afficher la chaîne mère entière afin de pouvoir voir quelque chose comme "confiseries / saisonniers / Nestlé" - Et ensuite, l'utilisateur peut modifier toute la hiérarchie du produit p>
L'arborescence de fonction «code> sur mesure suivante () code> a fonctionné pour moi
La réponse de Richardathome est la bonne. Dans CakePHP 3. + Vous écrivez:
$categories = $this->find("all") ->order(...) ->contain(['Children']);