开发者

How to get count of Post comments to display it in backend Posts list?

开发者 https://www.devze.com 2023-02-26 14:15 出处:网络
If it helps, here is my schema for Posts and Comments: BlogPost: actAs: Timestampable: ~ I18n: fields: [title, body]

If it helps, here is my schema for Posts and Comments:

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

Here is my Post Query class:

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');
        }
     }

Here is my Post Table class:

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();
    }

}

So in generator.yml in list config I write:

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

But id doesn't work and throws error:

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

Also there are too many queries to DB.

So how to overcome this error and get count of comments for each post?


You need to add the method to the BlogPost class for nb_comments

// BlogPost class
public function getNbComments()
{
    // return number of comments
}

See 'Custom Fields' section in http://www.symfony-project.org/gentle-introduction/1_4/en/14-Admin-Generator

0

精彩评论

暂无评论...
验证码 换一张
取 消