试图在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关系就像文档中描述的那样。
参加约会很开心;)