具有两个hasOne关系的模型到同一个表

时间:2012-01-22 17:07:51

标签: cakephp cakephp-2.0 cakephp-appmodel

我正在与CakePHP建立一个MMA(混合武术)网站。我的数据库中有一个fights表,最简单的有三列:idfighter_afighter_b

我无法理解我的Fight模型与我的Fighter模块之间的关系类型。我是否正确地认为fighter_afighter_b会有两个hasOne关系?

我在Fight模型中尝试了以下内容:

<?php
class Fight extends AppModel {

    public $name = 'Fight';
    public $hasOne = array(
        'FighterA' => array(
            'className' => 'Fighter',
            'foreignKey' => 'fighter_a'
        ),
        'FighterB' => array(
            'className' => 'Fighter',
            'foreignKey' => 'fighter_b'
        )
    );
}

然后在我的Fighter模型中:

<?php
class Fighter extends AppModel {

    public $name = 'Fighter';
    public $hasMany = array(
        'Fight'
    );
}

但是在调用$this->Fight->findById($id)时,我的CakePHP应用程序中出现了错误(其中$id是战斗机的ID):

  

错误: SQLSTATE [42S22]:未找到列:1054'字段列表'中的未知列'Fight.fighter_id'

如何链接我的模型以便我可以召唤战斗机所有的战斗?

1 个答案:

答案 0 :(得分:1)

根据问题从对话中退出,解决方案将是:

在您的FighterModel中重写$ hasMany,如下所示:

   public $hasMany = array(
      'Fight' => array(
         'className' => 'Fight',
         'finderQuery' => 'SELECT * FROM fights AS Fight WHERE Fight.fighter_a_id = {$__cakeID__$} OR Fight.fighter_b_id = {$__cakeID__$};'
      )
   );