我如何计算评论,以便我可以根据受欢迎程度进行展示,即谁具有最高评价以首先显示等等。哪个场所的评价最高,会先显示,然后是休息。我试过了,但它没有用。
Array
(
[0] => Array
(
[Venue] => Array
(
[id] => 6
)
[Review] => Array
(
[0] => Array
(
[id] => 9
[rating] => 4
[venue_id] => 6
)
[1] => Array
(
[id] => 10
[rating] => 3
[venue_id] => 6
)
[2] => Array
(
[id] => 11
[rating] => 3
[venue_id] => 6
)
)
)
[1] => Array
(
[Venue] => Array
(
[id] => 15
)
[Review] => Array
(
[0] => Array
(
[id] => 16
[rating] => 5
[venue_id] => 15
)
[1] => Array
(
[id] => 17
[rating] => 4
[venue_id] => 15
)
)
)
[2] => Array
(
[Venue] => Array
(
[id] => 17
)
[Review] => Array
(
[0] => Array
(
[id] => 15
[rating] => 4
[venue_id] => 17
)
)
)
[3] => Array
(
[Venue] => Array
(
[id] => 31
)
[Review] => Array
(
)
)
[4] => Array
(
[Venue] => Array
(
[id] => 32
)
[Review] => Array
(
[0] => Array
(
[id] => 18
[rating] => 1
[venue_id] => 32
)
[1] => Array
(
[id] => 19
[rating] => 1
[venue_id] => 32
)
[2] => Array
(
[id] => 20
[rating] => 1
[venue_id] => 32
)
[3] => Array
(
[id] => 21
[rating] => 1
[venue_id] => 32
)
[4] => Array
(
[id] => 22
[rating] => 1
[venue_id] => 32
)
)
)
)
if ($order == 'popularity') {
$order = array('COUNT(Review) DESC');
}
$this->Paginator->settings = array('conditions' => $conditions, 'limit' => 10, 'order' => $order, 'page' => @$data['page']);
$sqql = $this->Paginator->paginate('Venue');
答案 0 :(得分:0)
这里我只是通过在给定控制器的模型中编写2行编码来实现它。我发现这是使用cakephp中的“Virtualfield”概念来实现它的最佳方法。
var $virtualFields = array(
'review_count' => 'SELECT COUNT(*) FROM reviews as Review WHERE Review.venue_id = Venue.id'
);
使用Virtualfield概念后,似乎更容易了。
这里的结果将是这样的
Array
(
[0] => Array
(
[Venue] => Array
(
[id] => 6
[review_count]=> 3
)
)
[1] => Array
(
[Venue] => Array
(
[id] => 15
[review_count]=>2
)
)
[2] => Array
(
[Venue] => Array
(
[id] => 17
[review_count]=>1
)
)
[3] => Array
(
[Venue] => Array
(
[id] => 31
[review_count]=>0
)
)
[4] => Array
(
[Venue] => Array
(
[id] => 32
[review_count]=>5
)
)
在这里,您可以轻松找到某个ID的评论数据。 谢谢