具有多个外键的CakePHP模型关系

具有多个外键的CakePHP模型关系,cakephp,foreign-keys,relationship,has-many,Cakephp,Foreign Keys,Relationship,Has Many,在我的CakePHP应用程序中,我有比赛和球队的模型。每场比赛都有一个主队id和一个客队id,这两个id都指向不同的球队 在my team.php文件中,我能够为球队的主场比赛建立关系: var $hasMany = array( 'HomeMatch' => array('className' => 'Match', 'foreignKey' => 'home_team_id'), 'AwayMatch' => array('className' => '

在我的CakePHP应用程序中,我有比赛和球队的模型。每场比赛都有一个主队id和一个客队id,这两个id都指向不同的球队

在my 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

它们以单独的数组返回,因为排序代表不同的模型(在这个特殊情况下,模型是相同的)

您可能应该构建一个helper方法来检查检索到的数据(在模型对象或单独的helper类中)并“展平”它。然后你就可以把它分类了


Ken.

一个定制的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__$}'
    )
);

我遇到了一个类似的问题,我没有创建
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__$}')
            )
        ),
    )
);

@deceze任何CakePHP 3.x解决方案。任何CakePHP 3.x解决方案。