2017-06-14 1 views
0

Notre société a hérité d'une application utilisant le framework PHP Qcubed. L'une des fonctionnalités de ce framework est la méthode d'interrogation QQuery. Nous n'avons pas pu déterminer s'il était possible de créer une jointure entre deux tables sur deux colonnes à l'aide de QQuery.QCubed - Joindre des tables sur plusieurs colonnes

Existe-t-il des développeurs QCubed?

Répondre

0

Existe-t-il des développeurs QCubed? ->Oui, beaucoup d'entre eux. La plupart de l'action se trouvent sur le github

https://github.com/qcubed/qcubed

Rejoint: La chose amusante à propos QQuery est qu'il se joint à des tables automagiquement lorsque les clés étrangères correctes sont mises en place entre les tables. La page d'exemples a des tonnes d'informations à ce sujet, vérifier:

http://qcu.be/examples/index.php

Astuce supplémentaire: Ne pas essayer de définir vos jointures avant de les charger. Qcubed effectuera automatiquement la jointure lorsqu'un objet associé est demandé, mais il est préférable de les développer à l'avance.

Exemple rapide:

//loads a Person object into memory 
//select * from person where id = 1; 
$objPerson = Person::Load(1); 
echo $objPerson->Name . ' lives in ' . $objPerson->Town->Name;//will cause a query in the style "select * from town where id=x;" 

//loads a Person object into memory, and joins the Town table. 
//select * from person LEFT JOIN town on town.id = person.town_id where id = 1; 
$objPerson = Person::Load(1, QQ::Clause(QQ::Expand(QQN::Person()->Town))); 
echo $objPerson->Name . ' lives in ' . $objPerson->Town->Name;//no extra query, town was already joined by the expand. 

deux renverra les mêmes données, mais celle-ci est plus efficace.

Pour répondre à la partie sur le fait d'avoir 2 colonnes comme primaire: Je ne suis pas sûr à 100%, je n'ai jamais utilisé QCubed de cette façon. Toutefois, consultez http://qcu.be/examples/vendor/qcubed/framework/assets/php/examples/code_generator/primary_keys.php qui mentionne:

QCubed offre également un certain soutien pour les tables qui ont des clés primaires à plusieurs colonnes définies sur elle. Pour les tables qui ont des clés primaires multi-colonnes, QCubed générera entièrement l'objet lui-même. Notez cependant que vous ne pourrez pas utiliser cet objet généré en tant qu'objet associé pour une autre table (en d'autres termes, QCubed ne prend pas en charge les clés étrangères multi-colonnes). Cependant, avec toutes les méthodes Load générées dans ces objets, il est toujours possible de développer entièrement une application avec des tables qui utilisent des clés étrangères multi-colonnes. Fondamentalement, chaque fois que vous voulez accéder à un objet associé via une clé étrangère à plusieurs colonnes, vous pouvez simplement appeler la méthode Load de cet objet directement pour récupérer cet objet.

Vérifiez le fichier codegen.xml dans votre installation locale si vous souhaitez définir des relations sans clé étrangère.

+0

Merci Zunderscore, cela a été utile, mais je ne pense pas qu'il a répondu à ma question principale concernant les jointures à deux colonnes. Je fais référence à une relation où une table est liée à une autre en fonction des valeurs de deux champs. L'assemblage automatique localisera-t-il la table liée en fonction de la valeur des deux champs? – WillyPowwow

+0

@willyPowwow J'ai ajouté quelques informations sur les clés primaires multi-colonnes. – Zunderscore