コード例 #1
0
ファイル: TaggableTemplate.class.php プロジェクト: hashir/UoA
 /**
  * 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']);
         }
     }
 }