使用查询结果插入第二个表——Codeigniter



我正在使用代码点火器创建一个应用程序,在根据查询结果将行插入表中时遇到问题。

我想做的是根据作业选择一组任务,然后将这些任务插入一个表中,该表记录任务是否已完成,例如

Table Tasks
TaskID TaskGroup TaskDesc
1      WashCar    Get Bucket
2      WashCar    Fill with Water
3      WashCar    Add Soap
4      PolishCar  Get Buffer
5      PolishCar  Get Polish
6      PolishCar  Get Power Lead

因此,用户所做的是填写表格并选择要进行的工作类型,例如洗车或抛光车,然后我想做的是获得与洗车相关的所有任务ID的列表,并将其插入工作表中,该工作表记录该任务是否已完成,例如

Work Table
WorkID TaskID TaskDate TaskComplete
1      1      01/01/2015 N
2      2      01/01/2015 N
3      3      01/01/2015 N

在我提交表单的那一刻,所有其他表都被填充了,但我的工作表没有被填充——没有错误,只是没有被填充。

这是我目前模型中的内容(我从其他Stack Overflow问题中拼凑而成):

$workDueDate = date('Y-m-d H:i:s', strtotime('14 days'));
$creator4 = $this->session->userdata('logged_in');
$wkCreator = $creator4['id']; 
$workCreator = $wkCreator;
$workCreateDate = date('Y-m-d H:i:s');
$this -> db -> select('taskid');
$this -> db -> from('task');
$this -> db -> where ('taskgroup','washcar');
$this -> db -> order_by('taskid', 'asc');
$workQuery = $this -> db -> get();
return $workQuery->result_array();
for($i=0; $i<$workQuery;$i++){
$insertWork = array(
'taskid' => $workQuery[$i],
'taskdate' => $workDueDate,
'taskcomplete' => 'N',
);
$this->db->insert('work_w',$insertWork);
}

正如你所看到的,我对这件事很陌生,在让它发挥作用方面遇到了一些问题。这是最新的迭代,我尝试过foreach循环,但似乎无法使其工作。

有人对我在这里做错了什么或如何最好地做到这一点有任何想法吗?

感谢

编辑

更新代码:

$workDueDate = date('Y-m-d H:i:s', strtotime('14 days'));
$creator4 = $this->session->userdata('logged_in');
$wkCreator = $creator4['id']; 
$workCreator = $wkCreator;
$workCreateDate = date('Y-m-d H:i:s');
$this -> db -> select('taskid');
$this -> db -> from('task');
$this -> db -> where ('taskgroup','washcar');
$this -> db -> order_by('taskid', 'asc');
$workQuery = $this -> db -> get();
foreach ($workQuery as $wtid){
$insertWork = array(
'taskid' => $wtid['taskid'],
'taskdate' => $workDueDate,
'taskcomplete' => 'N',
);
$this->db->insert('work_w',$insertWork);
}

正如其他用户所提到的,在循环之前有一个额外的return

但这不是完成这项任务的正确方式。首先,它是所有数据相关的,所以你最好在数据库中的存储过程中而不是PHP中这样做。其次,完全不使用循环就可以获得相同的结果:

INSERT INTO work_w
(taskid, taskdate, taskcomplete)
SELECT task_id, date_add(CURRENT_DATE, INTERVAL 14 DAY), 'N'
FROM task
WHERE taskgroup = 'washcar'
ORDER BY taskid

问题是:

return $workQuery->result_array();

您将在下一个循环开始之前离开函数。移除return行(或将其移动到末尾),然后循环将运行。

Couldnt无法使循环工作,但正如所指出的,这可能不是实现这一点的最佳方法。

我现在已经进行了一个查询(this->db->query()),现在我正在完美地填充工作表。

最新更新