CakePHP模型关系与多个外键

8
在我的CakePHP应用程序中,我有与比赛和球队相关的模型。每场比赛都有一个主队ID和客队ID,两者都指向不同的球队。
在我的team.php文件中,我能够建立一支队伍与其主场比赛之间的关系:
var $hasMany = array(
  'HomeMatch' => array('className' => 'Match', 'foreignKey' => 'home_team_id'),
  'AwayMatch' => array('className' => 'Match', 'foreignKey' => 'away_team_id')
);

我的问题是我无法自动地将一个团队主场和客场比赛检索到一个单一的数组中。也就是说,所检索到的比赛会分别返回在HomeMatch和AwayMatch数组中,这会导致排序困难。
我已经尝试了以下方法:
var $hasMany = array(
  'Match' => array('foreignKey' => array('home_team_id', 'away_team_id'))
);

...没有成功。

有什么想法可以将这两个外键合并为一个关系?

谢谢,Ben

3个回答

13

一个自定义的finderQuery应该就可以解决问题:

public $hasMany = array(
    'Match' => array(
        'className'   => 'Match',
        'foreignKey'  => false,
        'finderQuery' => 'SELECT *
                            FROM `matches` as `Match`
                           WHERE `Match`.`home_team_id` = {$__cakeID__$}
                              OR `Match`.`away_team_id` = {$__cakeID__$}'
    )
);

@deceze 有没有关于 CakePHP 3.x 的解决方案? - monsur.hoq

8

我曾经遇到类似的问题,但是我没有创建finderQuery,而是使用了conditions 运算符,结果效果很好!

public $hasMany = array(
    'Match' => array(
        'className'   => 'Match',
        'foreignKey'  => false,
        'conditions' => array(
            'OR' => array(
                array('Match.home_team_id' => '{$__cakeID__$}'),
                array('Match.away_team_id' => '{$__cakeID__$}')
            )
        ),
    )
);

有没有关于CakePHP 3.x的解决方案? - monsur.hoq

0

它们被返回到不同的数组中,因为排序代表不同的模型(在这种特定情况下,模型是相同的)。

你应该建立一个帮助方法来处理检索到的数据(在模型对象或单独的帮助类中),并将其“展平”。然后你就可以对其进行排序了。

肯恩。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接