2011-04-19 24 views
0

如果有幫助,這是我的文章和評論的模式:如何獲取發佈評論的數量以顯示在後端帖子列表中?

BlogPost: 
    actAs: 
    Timestampable: ~ 
    I18n: 
     fields: [title, body] 
    tableName: blog_posts 
    columns: 
    #id: { type: integer(4), primary: true, autoincrement: true } 
    user_id: { type: integer } 
    title: { type: string(255) } 
    body: { type: text } 
    relations: 
    User: 
     type: one 
     class: sfGuardUser 
     local: user_id 
     foreign: id 
    Comments: 
     type: many 
     class: BlogComment 
     local: id 
     foreign: post_id 

BlogComment: 
    actAs: 
    Timestampable: ~ 
    tableName: blog_comments 
    columns: 
    #id: { type: integer(4), primary: true, autoincrement: true } 
    post_id: { type: integer } 
    user_id: { type: integer } 
    body: { type: text } 
    relations: 
    Post: 
     type: one 
     class: BlogPost 
     local: post_id 
     foreign: id 

這是帖子的查詢類:

class BlogPostQuery extends Doctrine_Query { 

     /** 
     * 
     * @param Doctrine_Connection $conn 
     * @param string $class 
     * @return BlogPostQuery 
     */ 
     public static function create($conn = null, $class = null) { 
      return parent::create($conn, 'BlogPostQuery') 
        ->from('BlogPost p'); 
     } 

     /** 
     * 
     * @param string $fields 
     * @return BlogPostQuery 
     */ 
     public function addSelf($fields = 'p.*') { 
      return $this 
      ->addSelect($fields); 
     } 

     /** 
     * 
     * @param string $fields 
     * @return BlogPostQuery 
     */ 
     public function addUsers($fields = 'u.*') { 
      return $this 
      ->addSelect($fields) 
      ->innerJoin('p.User u') 
      ->addGroupBy('u.id'); 
     } 

     /** 
     * 
     * @param string $fields 
     * @return BlogPostQuery 
     */ 
     public function addComments($fields = 'pc.*') { 
      return $this 
      ->addSelect($fields) 
      ->leftJoin('p.Comments pc') 
      ->addGroupBy('p.id'); 
     } 


     public function addCommentsCount($alias = 'nb_comments') { 
      return $this 
      ->addSelect(sprintf('COUNT(pc.id) as %s', $alias)) 
      ->addGroupBy('p.id'); 
     } 
    } 

這是帖子表類:

class BlogPostTable extends Doctrine_Table 
{ 
    /** 
    * Returns an instance of this class. 
    * 
    * @return object BlogPostTable 
    */ 
    public static function getInstance() 
    { 
     return Doctrine_Core::getTable('BlogPost'); 
    } 

    public static function findAllWithCountComments() { 
     return BlogPostQuery::create() 
       ->addSelf() 
       ->addUsers() 
       ->addComments() 
       ->addCommentsCount() 
       ->execute(); 
    } 

} 

因此,在列表配置中的generator.yml中我寫道:

list: 
     title: Blog Posts Managment 
     display: [id,title,User,nb_comments] 
     table_method: findAllWithCountComments 

但ID不能正常工作,並拋出錯誤:

Unknown record property/related component "nb_comments" on "BlogPost"

也有太多的查詢數據庫。

那麼如何克服這個錯誤並獲得每個帖子的評論數?

回答

相關問題