我正在使用代码点火器创建一个应用程序,在根据查询结果将行插入表中时遇到问题。
我想做的是根据作业选择一组任务,然后将这些任务插入一个表中,该表记录任务是否已完成,例如
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()),现在我正在完美地填充工作表。