如何在 Codeigniter 中更新共享相同外键的多行
How to update multiple rows sharing same foreign key in Codeigniter
我有 2 个 table; db_file_acess and db_file_access_details
。我在 db_file_access_details
table 中有一列 subjects_id
。从 UI,我可以 select 几个带有其他详细信息的主题 [array],并将它们插入 db_file_acess
table,并将 subject_ids 插入 db_file_access_details
.插入没问题,但是当我更新两个 table 时,我似乎无法更新所有行。这是我的更新查询
$result = array();
foreach ($subject_id as $key => $val) {
$result[] = array(
'file_access_id' =>$q_id,
'subjects_id' => $_POST['subject_id'][$key]
);
}
$this->db->update_batch('db_file_access_details', $result, 'file_access_id');
查询运行但它仅使用一个 ID 进行更新,如下面的屏幕截图所示:
result()
数组共享如下:
Array
(
[0] => Array
(
[file_access_id] => 45
[subjects_id] => 1
)
[1] => Array
(
[file_access_id] => 45
[subjects_id] => 3
)
[2] => Array
(
[file_access_id] => 45
[subjects_id] => 4
)
)
经过update_batch查询,结果如下图
我做错了什么?
根据文档 update_batch('db_file_access_details', $result, 'file_access_id')
产生:
UPDATE `db_file_access_details` SET `subjects_id` = CASE
WHEN `file_access_id` = 45 THEN 1
WHEN `file_access_id` = 45 THEN 3
WHEN `file_access_id` = 45 THEN 4
ELSE `subjects_id` END
WHERE `file_access_id` IN (45, 45, 45)
对于所有三行,第一个案例匹配,因此所有 subject_id
都设置为 1。
要使 update_batch 正常工作,您需要使用 id
列。
根据您想要实现的目标,您还可以考虑删除 db_file_access_details
中 file_access_id
的所有行,然后用 insert_batch 插入 $result
数组.
我有 2 个 table; db_file_acess and db_file_access_details
。我在 db_file_access_details
table 中有一列 subjects_id
。从 UI,我可以 select 几个带有其他详细信息的主题 [array],并将它们插入 db_file_acess
table,并将 subject_ids 插入 db_file_access_details
.插入没问题,但是当我更新两个 table 时,我似乎无法更新所有行。这是我的更新查询
$result = array();
foreach ($subject_id as $key => $val) {
$result[] = array(
'file_access_id' =>$q_id,
'subjects_id' => $_POST['subject_id'][$key]
);
}
$this->db->update_batch('db_file_access_details', $result, 'file_access_id');
查询运行但它仅使用一个 ID 进行更新,如下面的屏幕截图所示:
result()
数组共享如下:
Array
(
[0] => Array
(
[file_access_id] => 45
[subjects_id] => 1
)
[1] => Array
(
[file_access_id] => 45
[subjects_id] => 3
)
[2] => Array
(
[file_access_id] => 45
[subjects_id] => 4
)
)
经过update_batch查询,结果如下图
根据文档 update_batch('db_file_access_details', $result, 'file_access_id')
产生:
UPDATE `db_file_access_details` SET `subjects_id` = CASE
WHEN `file_access_id` = 45 THEN 1
WHEN `file_access_id` = 45 THEN 3
WHEN `file_access_id` = 45 THEN 4
ELSE `subjects_id` END
WHERE `file_access_id` IN (45, 45, 45)
对于所有三行,第一个案例匹配,因此所有 subject_id
都设置为 1。
要使 update_batch 正常工作,您需要使用 id
列。
根据您想要实现的目标,您还可以考虑删除 db_file_access_details
中 file_access_id
的所有行,然后用 insert_batch 插入 $result
数组.