尝试在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
答案 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中描述的那样。
享受加入约会的乐趣;)