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

时间:2015-04-29 09:40:24

标签: php 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);
  }

3 个答案:

答案 0 :(得分:0)

问题在于:

return $workQuery->result_array();

您在下一个循环开始之前离开了该功能。删除return行(或将其移至末尾),然后循环将运行。

答案 1 :(得分:0)

正如其他用户提到的那样,在循环之前你还有一个额外的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

答案 2 :(得分:0)

无法让循环工作,但正如所指出的那样,这可能不是最好的解决方法。

我现在已经去查询了(这个 - &gt; db - &gt; query()),我现在正在完美地填充工作表。