我有一个玩家表和一个视频表。在视频表中,我有 2 个字段(PlayerA 和 PlayerB),这些值必须来自玩家表。但是,当我在表视频中有 2 个名为player_id 的外键时,它表示我有一个重复的外键。
现在我只能将 1 个玩家姓名存储到数据库中。
球员表:
1 player_id int(11)
2 player_firstname varchar(45)
3 player_surname varchar(45)
4 player_birthDate date
5 player_turnedPro year(4)
6 player_nickname varchar(45)
7 player_nationality varchar(45)
8 player_highestBreak varchar(45)
9 player_highestRanking int(11)
10 player_centuryBreaks int(11)
11 player_careerWinnings varchar(55)
12 player_worldChampion varchar(45)
13 player_image varchar(255)
14 player_category varchar(45)
视频表:
1 video_id int(11)
2 video_title varchar(45)
3 video_date timestamp
4 video_scoreA tinyint(4)
5 video_scoreB tinyint(4)
6 video_url varchar(255)
7 tournament_id int(11)
8 timeline_id int(11)
9 player_id int(11) => PLAYER A
10 player_id int(11) => PLAYER B => here it says that I have a duplicate
是否可以在视频表中存储填充在 2 个字段中的玩家表中的值?
更新
视频表:
1 video_id int(11)
2 video_title varchar(45)
3 video_date timestamp
4 video_scoreA tinyint(4)
5 video_scoreB tinyint(4)
6 video_url varchar(255)
7 tournament_id int(11)
8 timeline_id int(11)
players_videos 表:
1 videos_players_id int(11)
2 video_id int(11)
3 player_id int(11)
视频模型:
public $hasAndBelongsToMany = array(
'Player' =>
array(
'className' => 'Player',
'joinTable' => 'players_videos',
'foreignKey' => 'video_id',
'associationForeignKey' => 'player_id',
'unique' => true,
)
);
玩家模型:
public $hasAndBelongsToMany = array(
'Video' =>
array(
'className' => 'Video',
'joinTable' => 'players_videos',
'foreignKey' => 'player_id',
'associationForeignKey' => 'video_id',
'unique' => true,
)
);
添加操作中的VideosController:
$players = $this->Video->Player->find('list', array('fields'=>'player_firstname', 'player_surname'));
$this->set(compact('tournaments', 'timelines', 'players'));
add.ctp查看:
echo $this->Form->input('Player.Player');
index.ctp查看:
<?php foreach($players as $player): ?>
<?php //echo h($player['player_id']); ?>
<p><?php echo $this->Html->link($player['player_id'], array('controller' => 'players', 'action' => 'view', $player['player_id'])); ?></p>
<?php endforeach; ?>
最佳答案
我不推荐这种方法。对于这种情况,HABTM 协会是更好的选择。您可以在此处查看文档:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm
但是......你要求的是:
在您的视频模型中:
public $hasMany = array(
'Player A' => array(
'className' => 'Player',
'foreignKey' => 'player_a_id'
),
'Player B' => array(
'className' => 'Player',
'foreignKey' => 'player_b_id'
)
)
在您的 Player 模型中:
public $belongsTo = array(
'Video' => array(
'className' => 'Video',
'foreignKey' => 'video_id'
)
);
将列重命名为player_a_id 和player_b_id。
关于mysql - 蛋糕PHP : populating 2 fields with the same foreign key and write to database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24889945/