CakePHP模型关联



试图在cake php上建立模型关联,但表要么自引用,要么出错。

我有两张桌子"比赛"one_answers"团队"。

匹配项具有以下属性:id,team_ 1,team_ 2,game_ id,时间,

团队具有以下属性:id,team_name,game_id,

我正在努力使Match.Team_1和Match.Teal_2与适当的Team.id 相关

一场比赛必须有两支球队,而且从不多也从不少。

我尝试过使用2个hasOne关系,结果得到了一个自引用表。我现在正尝试使用Matches hasMany Teams关联,"limit"=>"2"只能有两支球队。然而,它使用match.id来查找匹配的团队,而不是使用team_1和team_2。

如有任何提示,我们将不胜感激。感谢

class Match extends AppModel {
public $hasMany = array(
    'Team' => array(
        'className' => 'Team',
        'foreignKey' => 'id',
        'limit' => '2',
    )
 );
}

给出的输出阵列

[Match] => Array
            (
                [id] => 33
                [team_1] => 4
                [team_2] => 2
                [match_time] => 2015-02-13 12:00:00
                [game_id] => 0
            )
        [Team] => Array
            (
                [0] => Array
                    (
                        [id] => 33
                        [team_name] => ABC

我可以推荐以下内容:

首先重命名home_id和guest_id 中的字段team_1和team_2

然后创建关联:

class Match extends AppModel {
public $belongsTo = array(
'HomeTeam' => array(
    'className' => 'Team',
    'foreignKey' => 'home_id'
),
'GuestTeam' => array(
    'className' => 'Team',
    'foreignKey' => 'guest_id'
),
);
}

在团队模型中创建关联:

class Team extends AppModel {
public $hasMany = array(
'HomeMatch' => array(
    'className' => 'Match',
    'foreignKey' => 'home_id'
),
'GuestMatch' => array(
    'className' => 'Match',
    'foreignKey' => 'guest_id'
)      
);
}

找到你的团队后,你有两个阵列,一个是主场比赛,第二个是客队比赛。您需要将这两个数组合并为一个数组,以便用于分页、排序等。

或使用可传染行为

$matches = $this->Team->find('all', array(
     'contain' => array('Match' => array(
         'conditions' => array(
             'OR' => array(
                 'Match.home_id' => $id,
                 'Match.guest_id' => $id,
             ),
          'order' => 'Match.date ASC'
         )
     ))
));

编辑:

class Team extends AppModel {
public $hasMany = array(
 // Or instead of the two associations try just one.
 // I not tested this
'Match' => array(
    'className' => 'Match',
    'foreignKey' => false,
    'conditions' => array(
       'OR' => array(
          'Team.id' =>'Match.home_id',
          'Team.id' =>'Match.guest_id'
       )
    )
),      
);
}

我想你想要的是蛋糕中的habtm关系。参见文件

比赛和团队之间存在n:m关系。意味着一支球队有很多场比赛,而一场比赛有很多支球队。因此,只需创建一个包含字段id、match_id、team_id的联接表matches_tams。在添加到您的团队和匹配模型之后,新的habtm关系就像文档中描述的那样。

参加约会很开心;)

相关内容

  • 没有找到相关文章

最新更新