派生字段中的CakePHP分页条件

时间:2010-02-17 10:46:18

标签: php cakephp

我想打一个游戏列表,这项运动是一项选定的运动。 关系如下: 游戏属于竞争属于团队属于运动 我想要做的是显示所有比赛sport_id = 1的比赛。 以下不起作用:

        $this->paginate = array('limit' => 30, 'page' => 1, 
    'conditions' => array('Competition.Team.sport_id' => '1'),
        'contain' => array('Competition', 'Competition.Team',
        'Gamefield', 'Changingroom', 'ChangingroomAway', 'Gametype'),
    'order'=>array('game_date'=>'asc'),         
    );  

任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:5)

我找到了解决方案:

    var $paginate=array(
    'Game'=>
    array(
        'joins'=>array(
            array('table'=>'competitions',
                  'alias'=>'Competition2',
                  'type'=>'left',
                  'conditions'=>array('Game.competition_id=Competition2.competition_id')
                  ),
            array('table'=>'teams',
                  'alias'=>'Team2',
                  'type'=>'left',
                  'conditions'=>array('Competition2.team_id=Team2.team_id')
                  ),
            ),
        'order'=>array('game_date'=>'asc'),
        'contains'=>array('Competition2'=>array('Team2'))
                    ));
function index() {
    $datum = date('Y-m-d H:m');
    $this->Game->recursive = 0;
    $scope=array('OR' => array(array('Team2.sport_id' => 2), array('Team2.sport_id' =>3)), 'Game.game_date >' => $datum);
//       Configure::write('debug',2);
    $this->set('games', $this->paginate(null,$scope));
}

感谢TehThreag帮助我

答案 1 :(得分:0)

包含不会创建任何连接,除非使用包含可以连接的关系,尽管使用了Containable。

这意味着,对于habtm,如果你想要一个连接,你必须像迈克尔那样做并指定它们。 此外,使用逻辑索引进行一些连接应该比使用Containable执行habtm更快,因为包含上述相同数据的结果将需要in(id1,id2,... id#)条件和从那里获取大量查询以获取各个相关记录。

连接解决方​​案将数据返回到一个db查询中。