CakePHP模型协会

时间:2015-02-15 18:40:56

标签: cakephp database-connection model-associations cakephp-appmodel

尝试在cake php上建立模型关联,但该表要么自引用,要么得到错误。

我有2张桌子'匹配'和'团队'。

匹配具有以下属性: ID, TEAM_1, TEAM_2, game_id, 时间,

团队具有以下属性: ID, 队名, game_id,

我正在尝试将Match.Team_1和Match.Team_2与相应的Team.id相关联。

一场比赛必须有两支球队,而且永远不会更多而且永远不会少。

我尝试过使用2个hasOne关系并且只有一个自引用表。我正在尝试使用Matches hasMany Teams协会现在使用'限制' => ' 2'准确地拥有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

2 个答案:

答案 0 :(得分:1)

我可以推荐以下内容:

首先在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'
)      
);
}

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

或使用Contanable行为

$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'
       )
    )
),      
);
}

答案 1 :(得分:-1)

我认为你所寻找的是蛋糕中的habtm关系。 See documentation

匹配和团队有n:m的关系。意味着1队有很多比赛,1场比赛有很多队。 因此,只需使用字段id,match_id,team_id创建连接表matches_teams。在此之后,在您的团队和匹配模型中添加新的habtm关系,就像documentation中描述的那样。

享受加入约会的乐趣;)