$t->diag('sfDoctrineFinder::with() and left joins'); Doctrine_Query::create()->delete()->from('DComment')->execute(); Doctrine_Query::create()->delete()->from('DArticle')->execute(); Doctrine_Query::create()->delete()->from('DCategory')->execute(); $category1 = new DCategory(); $category1->setName('cat1'); $category1->save(); $article1 = new DArticle(); $article1->setTitle('aaa'); $article1->setCategory($category1); $article1->save(); $article2 = new DArticle(); $article2->setTitle('bbb'); $article2->save(); $article = sfDoctrineFinder::from('DArticle')->leftJoin('DCategory')->with('DCategory')->findLast(); $category = $article->getCategory(); if (is_object($category)) { $t->isa_ok($article->getCategory(), 'Doctrine_Null', 'In a left join using with(), empty related objects are not hydrated'); } else { $t->isa_ok($article->getCategory(), 'NULL', 'In a left join using with(), empty related objects are not hydrated'); } Doctrine_Query::create()->delete()->from('DComment')->execute(); Doctrine_Query::create()->delete()->from('DArticle')->execute(); Doctrine_Query::create()->delete()->from('DCategory')->execute();
DbFinder::from('DArticle')->useCache($cache, 10)->where('Title', 'foo1')->findOne(); // normal query $article = DbFinder::from('DArticle')->useCache($cache, 10)->where('Title', 'foo1')->findOne(); // cached query $t->isa_ok($article, 'DArticle', 'Cached finder queries return Model objects'); $t->is($article->getId(), $article1->getId(), 'find() finder queries can be cached'); DbFinder::from('DArticle')->useCache($cache, 10)->where('Title', 'foo1')->count(); // normal query $nb = DbFinder::from('DArticle')->useCache($cache, 10)->where('Title', 'foo1')->count(); // cached query $t->is($nb, 1, 'count() finder queries can be cached'); apc_clear_cache('user'); DbFinder::from('DArticle')->useCache($cache, 10)->where('Title', 'foo1')->limit(1)->find(); // normal query $article = DbFinder::from('DArticle')->useCache($cache, 10)->where('Title', 'foo1')->findOne(); // cached query $t->isa_ok($article, 'DArticle', 'Cached queries return the correct result type'); $t->diag('useCache(true)'); apc_clear_cache('user'); Doctrine_Query::create()->delete()->from('DArticle')->execute(); $article1 = new DArticle(); $article1->setTitle('foo1'); $article1->save(); $finder = DbFinder::from('DArticle')->useCache(true, 10); $finder->where('Title', 'foo1')->limit(1); $key = $finder->getQueryObject()->calculateResultCacheHash(); $t->is($cache->fetch($key), null, 'No cache is set until the query is written'); $finder->find(); $t->isnt($cache->fetch($key), null, 'useCache(true) automatically selects available cache backend');
$article1 = new DArticle(); $article1->setTitle('tt1'); $article1->save(); $article2 = new DArticle(); $article2->setTitle('tt2'); $article2->save(); $article3 = new DArticle(); $article3->setTitle('tt3'); $article3->save(); $article4 = new DArticle(); $article4->setTitle('tt4'); $article4->save(); $article5 = new DArticle(); $article5->setTitle('t5'); $article5->save(); $t->diag('sfDoctrineFinderPager'); $pager = new sfDoctrineFinderPager('DArticle', 2); $pager->setPage(1); $pager->init(); $t->is($pager->getNbResults(), 5, 'sfDoctrineFinderPager::getNbResults() return the total nb of results'); $t->is($pager->getLastPage(), 3, 'sfDoctrineFinderPager::getLastPage() return the total nb of pages'); $t->is($pager->getFirstIndice(), 1, 'sfDoctrineFinderPager::getFirstIndice() return offset of the first result of the page'); $articles = $pager->getResults(); $t->is(count($articles), 2, 'sfDoctrineFinderPager::getResults() return an array of max $maxPerPage results'); $t->is(@$articles[0]->getTitle(), 'tt1', 'sfDoctrineFinderPager::getResults() return an array of BaseObject instances'); $t->is(@$articles[1]->getTitle(), 'tt2', 'sfDoctrineFinderPager::getResults() return an array of BaseObject instances');
$category1->save(); $category2 = new DCategory(); $category2->setName('cat2'); $category2->save(); $article1 = new DArticle(); $article1->setTitle('art1'); $article1->setCategory($category1); $article1->save(); $article2 = new DArticle(); $article2->setTitle('art2'); $article2->setCategory($category2); $article2->save(); $article3 = new DArticle(); $article3->setTitle('art3'); $article3->setCategory($category1); $article3->save(); $finder = sfDoctrineFinder::from('DArticle')-> withColumn('DCategory.Name')-> select(array('DArticle.Title', 'DCategory.Name')); $data = $finder->findOne(); $t->is($finder->getLatestQuery(), doctrine_sql('SELECT [D011d.id AS d__id, ]d.title AS d__title, d2.name AS d2__0 FROM d_article d INNER JOIN d_category d2 ON d.category_id = d2.id LIMIT 1'), 'select() can cope with a column added with withColumn()'); $t->is_deeply($data, array('DArticle.Title' => 'art1', 'DCategory.Name' => 'cat1'), 'find() does not request twice the columns added by way of withColumn() and select()'); $finder = sfDoctrineFinder::from('DArticle')-> join('DCategory')-> withColumn('DCategory.Name', 'cname')-> select(array('DArticle.Title', 'cname')); $row = $finder->findOne(); $t->is($finder->getLatestQuery(), doctrine_sql('SELECT [D011d.id AS d__id, ]d.title AS d__title, d2.name AS d2__0 FROM d_article d INNER JOIN d_category d2 ON d.category_id = d2.id LIMIT 1'), 'select() uses any alias specified in withColumn() in the query'); $expectedRow = array(