通过列别名与 CakePHP 模型的多个 hasMany 关联

Multiple hasMany associations with CakePHP model via column aliases

我正在为我的垒球队制作一个小应用程序。我想建立以下关联:

模型 Game 有两列,away_idhome_id,它们都是 Team.id.

的别名

Game 模型中我有:

/**
 * belongsTo associations
 *
 * @var array
 */
    public $belongsTo = array(
        'Home' => array(
            'className' => 'Team',
            'foreignKey' => 'home_id', // also tried simply 'id'
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Away' => array(
            'className' => 'Team',
            'foreignKey' => 'away_id', // also tried simply 'id'
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

Team 模型中我有:

public $virtualFields = ['home_id' => 'Team.id', 'away_id' => 'Team.id'];

并且:

/**
 * hasMany associations
 *
 * @var array
 */
    public $hasMany = array(
        'Game' => array(
                    'className' => 'Game',
                    'foreignKey' => 'home_id',
                    'dependent' => false,
                    'conditions' => '',
                    'fields' => '',
                    'order' => '',
                    'limit' => '',
                    'offset' => '',
                    'exclusive' => '',
                    'finderQuery' => '',
                    'counterQuery' => ''
                ),


// also tried only one 'Game' association with foreignKey => [home_id, away_id]
        'Game' => array(
                    'className' => 'Game',
                    'foreignKey' => 'away_id',
                    'dependent' => false,
                    'conditions' => '',
                    'fields' => '',
                    'order' => '',
                    'limit' => '',
                    'offset' => '',
                    'exclusive' => '',
                    'finderQuery' => '',
                    'counterQuery' => ''
                )
    );

出现以下错误:

注:"Psychouts"是下面SQL中唯一不自明的出现;这是数据库名称(也是我的团队名称,henh)。

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Team.id' in 'field list'

SQL 查询:SELECT Game.id, Game.when, Game.cancelled, Game.field, Game.home_id, Game.away_id, Game.score_us , Game.score_them, Home.id, Home.captain_id, Home.name, Home.wins, Home.losses, Home.ties, Home.scored, Home.allowed, (Team.id) AS Home__home_id, (Team.id) AS Home__away_id, Away.id, Away.captain_id, Away.name, Away.wins, Away.losses, Away.ties, Away.scored, Away.allowed, (Team.id) AS Away__home_id, (Team.id) AS Away__away_id FROM psychouts.games AS Game LEFT JOIN psychouts.teams AS Home ON (Game.home_id = Home.id) LEFT JOIN psychouts.teams AS Away ON (Game.away_id = Away.id) WHERE 1 = 1 LIMIT 20

根据AD7six的评论,经过测试,似乎正确的解决方案是:

Team 模型中,删除我建议的虚拟字段,然后按如下方式定义 Game 关联:

/**
 * belongsTo associations
 *
 * @var array
 */
    public $belongsTo = array(
        'Game' => array(
            'className' => 'Game',
            'foreignKey' => ['OR' => ['Game.home_id = Team.id', 'Game.away_id = Team.id']]
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
    );

并且在 Game 模型中,照常定义 Team 关联:

/**
 * belongsTo associations
 *
 * @var array
 */
    public $belongsTo = array(
        'Team' => array(
            'className' => 'Team',
            'foreignKey' => 'id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
    );