Esempio n. 1
0
 public function testTicket()
 {
     $q = new Doctrine_Query();
     // simple query with deep relations
     $q->addSelect('Resume.id, Level.id, Level.label')->from('ticket384_Resume Resume')->leftJoin('Resume.KnownLanguages KnownLanguages')->leftJoin('KnownLanguages.Level Level')->leftJoin('KnownLanguages.Language Language');
     try {
         // get the wrong resultset
         $aResult = $q->fetchArray();
         $this->fail();
     } catch (Doctrine_Query_Exception $e) {
         $this->pass();
     }
     $q->free();
     // now correct
     // we have to select at least KnownLanguages.id in order to get the Levels,
     // which are only reachable through the KnownLanguages, hydrated properly.
     $q = new Doctrine_Query();
     $q->addSelect('Resume.id, Level.id, Level.label, KnownLanguages.id')->from('ticket384_Resume Resume')->leftJoin('Resume.KnownLanguages KnownLanguages')->leftJoin('KnownLanguages.Level Level')->leftJoin('KnownLanguages.Language Language');
     $aResult = $q->fetchArray();
     // should be setted
     $bSuccess = isset($aResult[0]['KnownLanguages'][0]['Level']);
     $this->assertTrue($bSuccess);
     if (!$bSuccess) {
         $this->fail('fetchArray doesnt hydrate nested child relations, if parent doesnt have a column selected');
     }
 }
Esempio n. 2
0
 /**
  * query
  * queries the database using Doctrine Query Language
  * returns a collection of Doctrine_Record objects
  *
  * <code>
  * $users = $conn->query('SELECT u.* FROM User u');
  *
  * $users = $conn->query('SELECT u.* FROM User u WHERE u.name LIKE ?', array('someone'));
  * </code>
  *
  * @param string $query             DQL query
  * @param array $params             query parameters
  * @param int $hydrationMode        Doctrine::FETCH_ARRAY or Doctrine::FETCH_RECORD
  * @see Doctrine_Query
  * @return Doctrine_Collection      Collection of Doctrine_Record objects
  */
 public function query($query, array $params = array(), $hydrationMode = null)
 {
     $parser = new Doctrine_Query($this);
     $res = $parser->query($query, $params, $hydrationMode);
     $parser->free();
     return $res;
 }
 public function testQueryCacheLifeSpan()
 {
     // initially NULL = not cached
     $q = new Doctrine_Query();
     $this->assertIdentical(null, $q->getQueryCacheLifeSpan());
     $q->free();
     // 0 = forever
     $this->manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE_LIFESPAN, 0);
     $q = new Doctrine_Query();
     $this->assertIdentical(0, $q->getQueryCacheLifeSpan());
     $q->free();
     $this->manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE_LIFESPAN, 3600);
     $q = new Doctrine_Query();
     $this->assertIdentical(3600, $q->getQueryCacheLifeSpan());
     $q->free();
     // test that value set on connection level has precedence
     $this->conn->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE_LIFESPAN, 42);
     $q = new Doctrine_Query();
     $this->assertIdentical(42, $q->getQueryCacheLifeSpan());
     $q->free();
     // test that value set on the query has highest precedence
     $q = new Doctrine_Query();
     $q->setQueryCacheLifeSpan(4321);
     $this->assertIdentical(4321, $q->getQueryCacheLifeSpan());
     $q->free();
 }
 public function executeSitemap()
 {
     $urls = array();
     $home = array();
     $home['url'] = Tools::get('url');
     $home['priority'] = 1.0;
     $home['changefreq'] = 'daily';
     $urls[] = $home;
     $latest = 0;
     $q = new Doctrine_Query();
     $themes = $q->select('t.*')->from('Theme t')->addWhere('t.approved = ?', array(true))->orderby('t.updated_at desc')->limit(50)->execute();
     $q->free();
     $latest_theme = 0;
     $theme_home = array();
     $theme_home['url'] = Tools::get('url') . '/theme';
     $theme_home['priority'] = 1.0;
     $theme_home['changefreq'] = 'daily';
     $urls[] = $theme_home;
     $application_home = array();
     $application_home['url'] = Tools::get('url') . '/application';
     $application_home['priority'] = 1.0;
     $application_home['changefreq'] = 'daily';
     $urls[] = $application_home;
     $module_home = array();
     $module_home['url'] = Tools::get('url') . '/module';
     $module_home['priority'] = 1.0;
     $module_home['changefreq'] = 'daily';
     $urls[] = $module_home;
     $user_home = array();
     $user_home['url'] = Tools::get('url') . '/user';
     $user_home['priority'] = 1.0;
     $user_home['changefreq'] = 'daily';
     $urls[] = $user_home;
     foreach ($themes as $theme) {
         $url = array();
         $url['url'] = Tools::get('url') . '/theme/show/' . $theme->getId();
         $url['priority'] = 0.5;
         $url['changefreq'] = 'daily';
         $url['lastmod'] = $theme->getUpdatedAt();
         $urls[] = $url;
         $current = strtotime($theme->getUpdatedAt());
         if ($current > $latest_theme) {
             $latest_theme = $current;
         }
         if ($current > $latest) {
             $latest = $current;
         }
     }
     $themes->free();
     $urls[1]['lastmod'] = date('r', $latest_theme);
     $q = new Doctrine_Query();
     $applications = $q->select('a.*')->from('Application a')->addWhere('a.approved = ?', array(true))->orderby('a.updated_at desc')->limit(50)->execute();
     $q->free();
     $latest_application = 0;
     foreach ($applications as $application) {
         $url = array();
         $url['url'] = Tools::get('url') . '/application/show/' . $application->getId();
         $url['priority'] = 0.5;
         $url['changefreq'] = 'daily';
         $url['lastmod'] = $application->getUpdatedAt();
         $urls[] = $url;
         $current = strtotime($application->getUpdatedAt());
         if ($current > $latest_application) {
             $latest_application = $current;
         }
         if ($current > $latest) {
             $latest = $current;
         }
     }
     $applications->free();
     $urls[2]['lastmod'] = date('r', $latest_application);
     $q = new Doctrine_Query();
     $modules = $q->select('m.*')->from('Madule m')->addWhere('m.approved = ?', array(true))->orderby('m.updated_at desc')->limit(50)->execute();
     $q->free();
     $latest_module = 0;
     foreach ($modules as $module) {
         $url = array();
         $url['url'] = Tools::get('url') . '/module/show/' . $module->getId();
         $url['priority'] = 0.5;
         $url['changefreq'] = 'daily';
         $url['lastmod'] = $module->getUpdatedAt();
         $urls[] = $url;
         $current = strtotime($module->getUpdatedAt());
         if ($current > $latest_module) {
             $latest_module = $current;
         }
         if ($current > $latest) {
             $latest = $current;
         }
     }
     $modules->free();
     $urls[3]['lastmod'] = date('r', $latest_module);
     $q = new Doctrine_Query();
     $users = $q->select('u.*')->from('User u')->addWhere('u.active = ?', array(true))->orderby('u.updated_at desc')->limit(50)->execute();
     $q->free();
     $latest_user = 0;
     foreach ($users as $user) {
         $url = array();
         $url['url'] = Tools::get('url') . '/user/show/' . $user->getId();
         $url['priority'] = 0.5;
         $url['changefreq'] = 'daily';
         $url['lastmod'] = $user->getUpdatedAt();
         $urls[] = $url;
         $current = strtotime($user->getUpdatedAt());
         if ($current > $latest_user) {
             $latest_user = $current;
         }
     }
     $users->free();
     $urls[4]['lastmod'] = date('r', $latest_user);
     $urls[0]['lastmod'] = date('r', $latest);
     $this->urls = $urls;
 }