/** * Preload tags for a set of objects. It might be usefull in case you want to * display a long list of taggable objects with their associated tags: it * avoids to load tags per object, and gets all tags in a few requests. * * @param array $objects */ public static function preloadTags(&$objects) { $searched = array(); foreach ($objects as $object) { $class = get_class($object); if (!isset($searched[$class])) { $searched[$class] = array(); } $searched[$class][$object->getPrimaryKey()] = $object; Taggable::set_saved_tags($object, array()); } $q = Doctrine_Core::getTable('Tagging')->createQuery('t')->leftJoin('t.Tag as tag')->orderBy('t.taggable_id')->setHydrationMode(Doctrine_Core::HYDRATE_ARRAY); foreach ($searched as $model => $instances) { $qClone = clone $q; $taggings = $qClone->addWhere('t.taggable_model = ?', $model)->andWhereIn('t.taggable_id', array_keys($instances))->execute(); foreach ($taggings as $tagging) { Taggable::add_saved_tag($instances[$tagging['taggable_id']], $tagging['Tag']['name']); } } }