Bonjour,

Dans une base de données, j'ai une table de liaison pour relation HBTM. La laison porte sur la clef unique des deux tables liées (table1 et table2) =>(clef1 et clef2)

J'utilises un formulaire pour créer manuellement ces liaisons (fonctionnement répondant au besoin du client) appelons la tableDeLiaison.

Depuis la vue d'un enregistrement de Table1 j'ai un lien qui mène au formulaire ADD du controlleur de TableDeLaison, dans ce lien je met un paramètre pour indiquer table1 et l'id de l'enregistrement. Ce qui fait que dans le formulaire ADD de TableDeLiaison, je met le champ "ID table1" en readOnly

Mon problème porte sur le champ "Id Table2", comment faire pour qu'il affiche dans son "select", que les possibilité inexistantes encore dans la table de laison (la liaison ne pouvant être qu'unique)

C'est pas facile à expliquer alors un grand merci à ceux qui auront lus jusqu'au bout et félicitation à ceux qui ont compris et me porteront aide :)

4 réponses


Bonjour,

Si j'ai bien compris, tu veux que avec un table1_id donnée, afficher les lignes de table2 qui ne sont pas encore liées à table1 via la tabledeliaison.

Dans ce cas je t'ai trouvé la requête qui fait ça :

SELECT DISTINCT * FROM table2
WHERE NOT EXISTS (
    SELECT tabledeliaison.table2_id FROM tabledeliaison
    WHERE tabledeliaison.table2_id = table2.id
            AND tabledeliaison.table1_id = 2
)

Petite explication, en gros tu SELECT sur la table2 les lignes où la requête suivante n'améne aucun résultat.
La requête dans les parenthèses donne toutes les lignes où tabledeliaison possède l'id de la table2 (qui correspond à un paramètre donné par la requête avant la parenthèse) et que l'id de la table1 soit celle donnée par toi, tu dois remplacer le '2' par l'id de ta table1.
Donc si cette requête donne un résultat, alors le SELECT de base n'envoi pas le résultat.

Voilà l'explication est un peu bordélique je l'avoue, en espérant que ton problème soit résolu.

A+

siriu
Auteur

C est exactement ça mais en fait je ne fais pour le moment pas de requête puisque le champ s affiche ave. U. $this->maTable2->id je ne fais pas de requete, c est cake qui gere. Puis je lui spécifier dans le form quel requête alimente le champ ?

En fait, tu fais ta requête, tu mets dans un variable, du genre : $d = LAREQUETE.

Tu envoi à la vue : $this->set('d', $d);

Puis dans la vue tu fais : $this->Form->select('d', $d);

Je vois pas d'autres solutions, après quand le form est validé, tu auras plus de traitement à faire.

A+

siriu
Auteur

Ok je vais essayer.
Merci à toi et très bonne année 2012