Bonjour à tous,

Je suis face à un cas un peu particulier qui n'est visiblement pas prévu par les relations dans Cake : j'ai besoin de faire une relation hasAndBelongsToMany, mais où l'un des deux models ne pourra avoir que 2 relations avec l'autre.

Mon cas est assez complexe, donc je vais prendre un autre exemple pour illustrer.

J'ai un model Sportif d'un côté, et un model Discipline de l'autre.

Chaque discipline peut accueillir autant de sportifs qu'elle le veut, il n'y a aucune limite.

En revanche, un sportif ne peut pratiquer que 2 disciplines. Il est totalement libre dans son choix, mais il ne peut en avoir que 0, 1 ou 2.

J'ai donc fouillé la doc, l'API et également pas mal de pages de résultats Google, mais sans succès.

Il y a des tas de conditions que l'on peut mettre en place lorsqu'on établi une relation, mais pas celle-ci. A noter que le paramètre 'limit' n'est valable que pour les query qui récupèrent les éléments de façon récursive.
On peut quand même enregistrer plus de 2 disciplines par sportif si on fixe la limit à 2, mais seuls les deux premières vont remonter.

J'ai déjà des petites idées sur la façon de faire, en établissant pas mal de règles sur le beforeSave() de mon model, mais le souci c'est que ce model est appelé de façon récursive dans des tas d'autres modèles (un sportif peut faire partie d'un club, d'une région, etc), et que généralement je gère toutes mes mises à jour récursives avec un saveAll, ce qui pose quelques soucis au moment de remonter les erreurs lorsque l'on a des beforeSave().

Si quelqu'un a déjà été confronté au même cas de figure, j'apprécierai le coup de main avec plaisir.

1 réponse


Pakito
Auteur
Réponse acceptée

Après plusieurs mois de recherche, j'ai finalement désespéré : pour traiter ce genre de choses, la seule piste semble être de travailler dans le beforeSave() et de lever des exceptions à l'enregistrement.