How to get count of Post comments to display it in backend Posts list?
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
精彩评论