外键我有3个表:更新多行与选择的形式
文件(的file_id,名称等),
组(GROUP_ID,姓名等)和file_group(file_id,group_id)=>在这里使用外键和来自两个表(文件和组)的主要 键。
我的问题是:我无法对我的表file_group
进行更新。
错误消息:完整性约束冲突:1062 Duplcate进入 '40 -6' 的重点小学....
我知道为什么它告诉我,但我仍然不能使它发挥作用。
的代码是:
<form method="post" action="edit.php">
<select multiple="multiple" name="groups" class="form-control" >
<option value=1>Admin</option>
<option value=2>project_1</option>
<option value=11>Project_Bio</option>
<option value=12>Project_3</option>
<option value=20>Project_Off</option>
<option value=22>Project_zed</option>
</select>
</form>
<?php
$id = 40;
if(!empty($_POST)){
//signleton to get the table where i want to make the update
$fc = $app->getTable('fc');
$new_grps = $_POST['groups'];
foreach($new_grps as $k => $new_grp){
$fc->update($id,[
'group_id' => $new_group
]);
}
}
?>
在我的桌子file_group
,一个文件可以有2组。 因此,代码尝试使用相同的数据进行相同的更新。对我来说,似乎循环不起作用!
任何提示?
的Var_dump();
给出如下:
array(2){
[0]=>string(1)"11"
[1] =>string(2)"20"
}
数据表结构:
--
-- Table structure for file
--
CREATE TABLE files (
file_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT DEFAULT NULL,
owner VARCHAR(255) DEFAULT NULL,
date DATETIME DEFAULT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (file_id),
KEY idx_title (title)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `groups`
--
CREATE TABLE groups (
group_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(25) NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (group_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `file_group`
--
CREATE TABLE file_group (
file_id SMALLINT UNSIGNED NOT NULL,
group_id TINYINT UNSIGNED NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (file_id, group_id),
CONSTRAINT fk_file_group_file FOREIGN KEY (file_id) REFERENCES files (file_id) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT fk_film_group_group FOREIGN KEY (group_id) REFERENCES groups (group_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
'var_dump($ _ POST);'你看到了什么?数据是否有意义?如果您尝试通过SQL IDE或shell运行该命令,查询是否工作?你不显示你实际上是如何将数据发布到服务器的。你可以将该代码编辑到问题中,还是编辑'var_dump'的结果到问题中? – Terminus