我是一个完整的CodeIgniter菜鸟。我正在尝试更新来自foreach循环的数据库中的一些项目。
foreach($transfer_lists as $lists) {
$this->db->from('tasks');
$this->db->where('task_list_id', $lists['list_id']);
$transfer_lists_check=$this->db->get()->result_array();
$transfer_new = array_shift($transfer_lists_check);
$new_array = array(
'task_id' => $transfer_new['task_id'],
'task_project_id' => $new_project_id
);
}
$this->db->update_batch('tasks', $new_array, 'task_list_id');
我新创建的数组只返回一个数组项。它应该返回3,因为数据库中有多少具有该特定list_id的数据。
从代码中可以看出,我正在尝试使用预设的$ project_id批量更新特定任务,因此我需要数组。
我正试图找到一个解决方案,但是我还没有找到类似的东西,或者只是我不知道如何搜索:/
更新
在与下面的@ akshay-hedge交谈之后,我开始意识到我试图在一个'foreach'循环中获得3个结果,只有1个参考。
解决方案:在'foreach'中包含另一个'foreach'以根据需要构建我的数组。
以下更新的代码:
foreach($transfer_lists as $lists) {
$this->db->from('tasks');
$this->db->where('task_list_id', $lists['list_id']);
$tasks_found=$this->db->get()->result_array();
// Solution to get the desired Array I was looking for
foreach($tasks_found as $tasks) {
$new_array[] = array(
'task_id' => $tasks['task_id'],
'task_project_id' => $new_project_id
);
}
}
$this->db->update_batch('tasks', $new_array, 'task_list_id');
更新2
之后,一些更多的交谈,@ akshay-hedge建议另一个解决方案,不使用任何'foreach',通过从'task_list_id'开始构建一个数组,我最初。
请检查下面接受的答案以获得解决方案。
答案 0 :(得分:1)
你有一些小问题要解决:
$new_array = array( .. )
- 这样你就可以在每次迭代中覆盖数组
$new_array[] = array( .. )
- 这样你就可以在每次迭代中向数组($new_array
)添加新元素。
所以修改你的代码
发件人强>
$new_array = array(
'task_id' => $transfer_new['task_id'],
'task_project_id' => $new_project_id
);
以强>
$new_array[] = array(
'task_id' => $transfer_new['task_id'],
'task_project_id' => $new_project_id
);
由于您获得了list_ids
的列表,因此可以使用where_in
$new_array = $this->db->select("'$new_project_id' as task_project_id,task_id",FALSE)
->where_in('task_list_id', array_column($transfer_lists,'list_id'))
->from('tasks')
->get()
->result_array();