Bonjour,

Voila j'ai rencontré un petit problème que j'ai réussi à régler, j'ai remarqué que CakePHP utilise par défaut category_id alors que j'ai un categorie_id donc j'ai dû le préciser.

Le problème

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Test.category_id' in 'field list'

Ce que je veux savoir

Malgré mon problème résolu, je suis curieux et je voulais savoir pourquoi CakePHP utilise category_id par défaut ? Pourtant j'en ai créé aucun.

Cordialement

4 réponses


Havok
Réponse acceptée

Afin de faciliter le travail de développement, CakePHP a mis en place un système de convention qui évite d'avoir à configurer trop de choses, y compris dans les associations entre Models.

Ton cas est simple : tu as créé une table categories et tu dois avoir défini une foreign key dans une autre table qui fait référence à l'ID de ta table categories ; tu as appelé la colonne de ta foreign key categorie_id.
Le problème c'est qu'en faisant ça, tu ne suis pas les conventions de CakePHP qui sont en anglais.

Ta colonne devrait s'appeler category_id et tu n'aurais pas eu à la définir manuellement lorsque tu as défini ton association.

Le problème c'est que la doc FR de Cake 3 semble ne pas préciser ça et pire, donner un mauvaise exemple.
Je viens d'ouvrir un ticket sur la dépot GitHub de la doc de Cake pour tirer ça au clair avec les autres contributeurs FR et éventuellement corriger la doc.

Havok
Réponse acceptée

Merci pour ton retour sur la version.
On a une pull request ouverte sur la doc de la V3 actuellement pour corriger ça (où on va préciser que les conventions doivent être suivies en anglais et corriger les exemples faux).

Une fois que ça sera passé, on fera la même modif pour la doc de la V2.

Maxou
Auteur

Bonjour Havok, super merci de ta réponse détaillée ! Je comprends mieux, oui j'ai regardé le sujet sur les conventions et ce n'est pas très explicite, sinon je suis sous Cake 2.

Je savais que j'étais un rebelle et que je ne suivais pas les conventions :D

Maxou
Auteur

Merci pour ces informations !! C'est super, je fais tourner l'info.