2011-05-17 36 views
0

我使用symfony的1.4.11。我有下一个组件类:Symfony的寻呼机 - 成品的配件 - 查询问题

class companiesComponents extends sfComponents { 

    public function executeCompanylist(sfWebRequest $request) { 



     // And the URL 
     if (!isset($this->url)) { 
      throw new Exception('Please specify the URL'); 
     } 

     // Save the page 
     if ($request->getParameter('page')) { 
      $this->setPage($request->getParameter('page')); 
     } 

     // Create pager 
     $this->pager = new sfDoctrinePager('Companies', sfConfig::get('app_ads_per_page', 5)); 
     $this->pager->setQuery($this->query); 
     $this->pager->setPage($this->getPage()); 
     $this->pager->init(); 
    } 

    protected function getPager($query) { 
     $pager = new Doctrine_Pager($query, $this->getPage(), 3); 

     return $pager; 
    } 

    protected function setPage($page) { 
     $this->getUser()->setAttribute('users.page', $page, 'admin_module'); 
    } 

    protected function getPage() { 
     return $this->getUser()->getAttribute('users.page', 1, 'admin_module'); 
    } 

我有行动:

public function executeAll(sfWebRequest $request) 
    { 
    $this->query = Doctrine_Core::getTable('Companies')->getAllCompany(); 
     $this->url = '@companylist'; 
    } 

而且我有allSucess.php

<?php include_component('companies', 'companylist', array(
     'query' => $query, 
     'url' => $url, 
     'noneFound' => __('You haven\'t created any ads yet.') 
     )) ?> 

在我的Companies Table类中

public function getAllCompany() 
    { 
    $q = $this->createQuery('a') 
    ->andWhere('a.active = ?',1) 
      ->leftJoin('a.Owner o') 
      ->leftJoin('o.Profile p') 
      ->andWhere('p.payed_until > NOW()') 

    ->addORDERBY ('created_at DESC'); 
} 

而且它不工作。我让我所有的唱片“公司”从数据库中,但他们没有选择根据我的查询...... 当我做

public function getAllCompany() 
     { 
     } 

,或者当我评论

// $this->pager->setQuery($this->query); 

我仍然得到所有我的记录:(

在日志中我看到:

Template: companies … allSuccess.php 

Parameters: 
$query (NULL) 
$url (string) 

当我做

public function getAllCompany() 
    { 
    $q = $this->createQuery('a') 
    ->andWhere('a.active = ?',1) 
      ->leftJoin('a.Owner o') 
      ->leftJoin('o.Profile p') 
      ->andWhere('p.payed_until > NOW()') 

    ->addORDERBY ('created_at DESC'); 
return $q->execute(); 
} 

我有错误:

Fatal error: Call to undefined method Doctrine_Collection::offset() 

我不明白它是如何获得的所有记录,并在那里我犯的错误:(

谢谢!

+2

安装了XDebug,你就会有一个完整的堆栈跟踪,而不仅仅是一条错误消息。顺便说一下,它应该是'addOrderBy',而不是'addORDERBY' – greg0ire 2011-05-17 22:07:40

回答

2

删除从getAllCompany()函数的返回语句->execute();文字...的DoctrinePager执行语句 - 你不需要......

public function getAllCompany() 
    { 
    $q = $this->createQuery('a') 
    ->andWhere('a.active = ?',1) 
      ->leftJoin('a.Owner o') 
      ->leftJoin('o.Profile p') 
      ->andWhere('p.payed_until > NOW()') 

    ->addOrderBy('created_at DESC'); 
return $q; 
} 
+1

谢谢!所有的作品,我忘了'返回$ q;' – denys281 2011-05-18 10:44:01