如何在查询中获得最活跃的博客标签?
我有两个DataObjects:
class BlogTag extends DataObject {
//...
/**
* @var array
*/
private static $belongs_many_many = array(
'BlogPosts' => 'BlogPost',
);
和
class BlogPost extends Page {
//...
/**
* @var array
*/
private static $many_many = array(
'Tags' => 'BlogTag',
);
现在我想知道如何获得一个DataList,其中所有BlogTags都是根据与他们相关的博客帖子排序的。这就是我已经拥有的,但不知怎的,我不知道如何按BlogPosts.Count()排序:
public function getPopularBlogTags($limit = 5) {
$tags = BlogTag::get()
->sort('BlogPosts.Count()') //doesn't work
->limit($limit);
return $tags;
}
答案 0 :(得分:5)
在IRC帮助下找到解决方案(感谢barry和mark)
public function getPopularBlogTags($limit = 5) {
$tags = BlogTag::get()
->setQueriedColumns(['ID', 'Title', 'Count(*)'])
->leftJoin('BlogPost_Tags','bpt.BlogTagID = BlogTag.ID','bpt')
->sort('Count(*) DESC')
->alterDataQuery(function($query){
$query->groupBy('BlogTag.ID');
})
->limit($limit);
return $tags;
}
在模板中:
<% loop $PopularBlogTags %>
<a href="$Link" title="$Title">$Title ($BlogPosts.Count())</a>
<% if not $Last %> | <% end_if %>
<% end_loop %>