【发布时间】:2013-04-30 16:09:20
【问题描述】:
我想限制使用可包含的更深层关联返回的字段。
我的联想:
游戏有很多评论
分页和可包含的代码:
$this->paginate = array(
'conditions' => $conditions,
'fields' => array(
'Game.id', 'Game.name',
'Publisher.id', 'Publisher.name'
),
'contain' => array(
'Game' => array(
'Review' => array(
'fields' => array('Review.id', 'ROUND(AVG(Review.score),1)')
)
),
)
);
$games = $this->paginate('Game');
目前,Review 表中的所有字段都已返回。 'ROUND(AVG(Review.score),1)' 永远不会返回。如何指定要从 Review 关联返回的字段?
SQL 转储 使用@theJetzah 的答案获取两个搜索结果。第一个是搜索一个游戏作为结果,第二个是搜索返回三个游戏。
SELECT `Review`.`id`, `Review`.`review_text`, `Review`.`score`, `Review`.`user_id`, `Review`.`game_id`, `Review`.`created`, `Review`.`platform_id`, (ROUND(AVG(`Review`.`score`),1)) AS `Review__average_score` FROM `videogamedb`.`reviews` AS `Review` WHERE `Review`.`game_id` = (55)
SELECT `Review`.`id`, `Review`.`review_text`, `Review`.`score`, `Review`.`user_id`, `Review`.`game_id`, `Review`.`created`, `Review`.`platform_id`, (ROUND(AVG(`Review`.`score`),1)) AS `Review__average_score` FROM `videogamedb`.`reviews` AS `Review` WHERE `Review`.`game_id` IN (55, 56, 57)
【问题讨论】:
-
既然你是对
Game模型进行分页,你为什么在'contain'中包含'Game'?游戏将成为主表/模型? -
@theJeztah:我目前在另一个名为 SearchesController 的控制器中。它用于处理整个网站的用户搜索。
-
Controller 没有定义你使用的模型,如果你在 $uses 数组中指定了多个模型,你也可以使用另一个模型,例如
public $uses = array('ModelA', ModelB'); -
刚刚意识到,您的计算字段可能不起作用;由于您使用的是聚合,因此需要对评论进行“分组”。你能解释一下这些模型是如何相关的吗?是
Game->hasMany->Review还是Game->belongsTo->Review? -
@thaJeztah 是
Game->hasMany->Review。另外,我的控制器中有public $uses = array('Game');。
标签: cakephp