Bonjour,

Je suis entrain de faire un projet sous CakePHP 3, je viens de prendre en main ce Framework et je cherche comment gérer les clefs étrangères de type ManyToMany.

Imaginons, j'ai ma classe "Utilisateurs" et "Groupes". Ainsi donc, en base données j'ai aussi "Groupes_Utilisateurs".
Dans CakePHP, j'ai donc :

UsersTable.php
$this->belongsToMany('Groupes');

GroupesTable.php
public function initialize(array $config)
{
$this->belongsToMany('Users');
}

Je n'arrive pas vraiment comprendre la différence entre belongsToMany et ManyToMany.

Par ailleurs, bien que j'ai effectué de nombreux essais, dans les deux cas, je ne sais pas comment ajouter une relation entre les deux quand je créé une entité, ou même comment afficher tout les membres d'un groupe. Ma seule solution a été d'ajouter ma Groupes_UtilisateursTable et de faire des requêtes normal, avec des Contain.

Si quelqu'un a deux minutes pour m'éclairer.

Cordialement,

2 réponses


Bonjour,

Tout d'abord il n'y pas de relation ManyToMany : ce que tu chercher toi c'est bien belongsToMany cd doc

Ensuite pour accéder à la table de liaison, par exemple :

$this->Users>get($id, ['contain'=> 'Groups'});

Cette requête va chercher dans ta table Users l'enregistrement et automatiquement dans ta table de liaison GroupsUsers les Group associés ; ces groupes seront dans l'objet $user->groups = [ ... ] (inversement pour avoir les Users d'un Group).

Ensuite pour ajouter des relations Groups<->Users, tu peux par exemple depuis la fiche d'un groupes créer un liste d'input :

$this->Form->input('users[][id]');

En soumettant le formulaire avec une liste d'input comme précédemment, cela va te créer un tableau d'id qui sera automatiquement sauvegarder dans la table de liaison.

Leic
Auteur

Salut,

Merci de ta réponse!

J'aimerai notamment pouvoir faire des ajouts et suppression sans passer par des formulaires. Et c'est la que je cale un peu.

Par exemple, pouvoir ajouter un utilisateur à un groupe. Et également le supprimer (via une requête DELETE).

Cordialement,