Bonsoir,

Je dois faire une liaison assez étrange de 2 tables qui ne sont pas liées normalement (ou c'était pas prévue en tout cas)

table 1 : id, abc_id, def_id, title, ....
table 2 : id, abc_id, def_id, title, ...

Ces 2 tables n'ont pas de lien direct mais j'ai quand même besoin de les lier via leurs colonnes communes : abc_id et def_id

FROM table_1 t1 JOIN table_2 t2 ON t1.abc_id=t2.abc_id AND t1.def_id=t2.def_id

Sauf que j'ai l'impression qu'il n'est pas possible de le faire via le Behavior "Contain" et les liaison "$hasMany" par exemple.
Je dois malheureusement faire une pagination sur table_1 mais avec des conditions dans table_2 et malheureusement les 2 colonnes communes sont le seul point de liaison actuellement.

Une idée ?

Merci

5 réponses


Erwane
Auteur
Réponse acceptée

Bon en me creusant la citrouille et en changeant d'idée j'ai trouvé une solution dans le controlleur via 'joins' => array() ....

Ça fonctionne pour la pagination mais ce n'est pas vraiment une liaison par "Containable". Si quelqu'un à une idée pour cette solution, au moins pour faire avancer le schmilblick, même si ma solution pour la pagination me suffira pour ce projet :)

L'ORM Prévois les cas générique là c'est effectivement un cas un petit peu spécial malheureusement :( le join me semble être la meilleur solution

Tu peux faire ça avec bindModel je crois ou avec l'option Joins de la méthode find().

Si tu a un abc_id c'est peut-être que tu as une table abcs ?
Si oui, ça peut être pratique de dire que tes models de la table 1 et de la table 2 belongs to les objets de la table abcs.
et ensuite quand tu récupère la liste des objets de la table abcs, tu aura les objets correspondants des deux tables.
Enfin je pense que ça devrait marcher.

Erwane
Auteur

via les joins ça fonctionne très bien, mais on ne peut pas faire cela en utilisant le actAs directement. J'ai dû le faire dans le controller.