Bonjour à tous,

Ça fait quelques jours que je galère avec ce problème, je début avec CakePhp3 et j'essaie sans succès de faire des associations. J'essaie avec le code le plus basic (un article qui possède une catégorie) sans résultat :\

Dans le fomulaire, la liste affiche les objets (ex { "id":1, "name": "cat" }) et lors de l'enregistrement, l'id (category_id) n'est pas lier. (L'id de la catégorie = 0 à chaque fois)

Pourtant mes tables semblent bien nommée, j'ai une table Posts et une Categories, ma table Posts possède un champs category_id

Le modèl PostsTable possède le hasOne

$this->hasOne('Categories', [
'foreignKey' => 'category_id'
]);

J'espère que vous allez pouvoir éclairer ma lanterne :)

4 réponses


connected
Réponse acceptée

Bonjour,

comme la souligné @Lartak, ton association ici est un belongsTo. Comme tu semble suivre les conventions de nommage de Cake, dans ton PostsTable.php tu peux ne mettre que :

$this->belongsTo('Categories'); // pas besoin de spécifier la clé étrangère

Après si l'id est toujours à 0, est-ce tu as vérifié si le nom de l'input est correct ?

Bonjour.
Pour commencer, tu as mal défini ton association.
Je suppose que la catégorie liée, peut être associée à plusieurs articles et non à un seul.
Tu devrais plutôt mettre l'association avec belongsTo :

$this->belongsTo('Categories', [
    'foreignKey' => 'category_id'
]);

Tu devrais regarder le Tutoriel : Tutoriel d’un Blog.
Ensuite, mets tes parties de codes dans la balise code la prochaine fois s'il te plaît, soit avec le bouton <\> ou alors avec ``` (avant et après le code).
L'association hasOne est utilisé par exemple pour un utilisateur à un profil, donc un utilisateur n'a qu'un profil et un profil n'appartient qu'a un seul utilisateur.
Dans ton cas, un article dépend d'une seule catégorie et une catégorie à plusieurs articles, donc l'association belongsTo est plus indiquée.

Fauve
Auteur

Merci pour tes éclaircissements :)
J'ai suivi le tuto et mon problème d'objet afficher dans la liste est résolu. Cependant, lors de l'enregistrement, la valeur de category_id est toujours à NULL. La seul étape que j'ai sauter dans le tuto c'est l'utilisation de migration avec cake (cake fonctionne pas et j'ai pas encore trouver la solution ^^).

Tu crois que le problème restant vient du fait que je n'utilise pas bake, ou je devrais chercher... ailleurs. (Je vais refaire le tuto, sais jamais :) )

Fauve
Auteur

Tu es tombé dans le mille ! En effet, je viens de remplacer l'input du tuto et ça fonctionne maintenant.

echo $this->Form->input('categories');

pour

echo $this->Form->input('category_id');

Merci pour vos réponses, ça ma permit de quitter mon cycle d'erreur pour ce petit bout de code. :)