Compte tenu des modèles suivants:Comment charger efficacement plusieurs relations has_many dans CodeIgniter DataMapper ORM?
Catégorie: has_many (« modèle ») Modèle: has_many (« tag », « procédure »)
Quelle est la façon la plus efficace de charger tous les objets liés à toutes les catégories ?
Par exemple, je suis en train de faire ce qui suit, mais nous espérons il y a une meilleure façon:
// Load all Category objects
$categories = new Category();
$categories->get();
// Load all Template objects related to each Category
foreach($categories as $category)
{
$category->templates->get();
// Load all the Tag and Procedure objects related to each template
foreach($category->templates as $template)
{
$template->tags->get();
$template->procedures->get();
}
}
En ce moment, ce code est exécuté plus de 200 requêtes sur une page particulière.
Est-ce que Datamapper a un type de chargement avide? ie: Model :: get (array ('include' => array ('tags', 'procedures'))). ou include_related méthodes? – Philip
Oui, sous la forme de include_related, mais cela ne fonctionne pas pour has_many, car l'hydratation de Datamapper ne peut actuellement pas gérer la répétition dans le résultat de la requête. – WanWizard
Existe-t-il un moyen plus efficace d'accomplir ceci? Je traite essentiellement de la même situation. Je charge environ 600 modèles, et j'aimerais inclure des modèles associés pour chacun d'entre eux, donc je suis en train de parcourir la première liste de modèles comme vous l'êtes, et d'exécuter 'get()' pour chacun d'entre eux. Le nombre de requêtes en cours d'exécution semble affecter la mémoire disponible sur ma machine. Y a-t-il un moyen plus efficace de le faire? – flyingL123