mysql - 蛋糕PHP : populating 2 fields with the same foreign key and write to database

标签 mysql sql cakephp foreign-keys

我有一个玩家表和一个视频表。在视频表中,我有 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/

相关文章:

mysql - 为多个用户返回不同的行

php - Laravel 中的多对多关系需要表的特定名称吗?

php - CakePHP:访问其他模型/app_model.php 中的模型以验证 Banknumber

php - CakePHP中的Cron Jobs突然停止了

没有 name 属性的 cakephp 表单输入

php - 如何修复 * 字节的 Content-Length 超出 * 字节的限制

带有 UNIX 时间戳字段的 MySQL 查询

mysql - 删除 key :value from json string stored in a MySQL database

mysql - sql GROUP BY 产生语法错误

mysql - SQL JOIN从表flights对应的表格表2中返回记录