在CodeIgniter中自动增加提交数据

时间:2014-09-29 12:22:55

标签: php mysql codeigniter auto-increment

我正在构建一个小的CodeIgniter CRUD应用程序,这是一个非常基本的应用程序。现在,在我的应用程序中,每当我以下列方式插入新学生时,我都需要自动增加roll数据:

    20141001
    20141002
      ...
      ...
    20141099
    20141100
    20142001
    20142002
      ... 
      ...
      ...
    20145099
    20145100
    20151001
    20151002
      ...
      ...
    20151100
    20152001
      ...
      ...

等等。 我的控制器 - student.php

    <?php
    if ( ! defined('BASEPATH')){ exit('No direct script access allowed');}
    class Student extends CI_Controller
    {
        function __construct()
        {
            parent::__construct();
            #$this->load->helper('url');
            $this->load->model('student_model');
        }

        //Show all Students
        public function index()
        {
            $data['student_list'] = $this->student_model->get_all_students();
           $this->load->view('student_view', $data);
        }


       //Insert a student
       public function insert_student_db()
       { 
            $sdata['name'] = $this->input->post('name');
            //Auto-increment, auto-generate roll, for each entry
            $sdata['roll'] = '20141000';
            for($i = 0; $i < 8; $i++) 
            {
                $sdata['roll']++;
                if(substr($sdata['roll'], 5) == '100')
                {
                    continue;
                }
            } 
            $sdata['department'] = $this->input->post('department');
            $sdata['email'] = $this->input->post('email');
            $sdata['mobile'] = $this->input->post('mobile');
            $res = $this->student_model->insert_student($sdata);
            if($res)
            {
                header('location:'.base_url()."index.php/student/".$this->index());

            }

        }

    }
    ?>

我的模特 - student_model.php

<?php
class Student_model extends CI_Model 
{
    function __construct()
    {
        parent::__construct();
        $this->load->database();
    }   

    //To retrieve all students
    public function get_all_students()
    {
        $query = $this->db->get('student');
        return $query->result();
    }

    //To add a new student to the database
    public function insert_student($data)
    {
        return $this->db->insert('student', $data);
    }

}
?>

它给了我奇怪的结果 - 而不是递增,我的所有条目都被分配了一个单一卷,即20141008

我得到的有问题的输出的屏幕截图: Screenshot

我的表格为student,其结构如下:

name             varchar(30)
roll             varchar(10)
department       varchar(10)
email            varchar(50)
mobile           varchar(15)

请注意,roll不是主键列,并且不是唯一的。

如何在CodeIgniter的上下文中解决我的问题?

2 个答案:

答案 0 :(得分:0)

如果您尝试增加数据库,可以执行此操作

public function incrementByOne($id){
        $this->db->where('id',$id);
        $this->db->set('roll','roll + 1', FALSE);
        $this->db->update('mytable');
    }

答案 1 :(得分:-1)

你的问题在这里

$sdata['roll'] = '20141000';
for($i = 0; $i < 8; $i++) 
{
    $sdata['roll']++;
    if(substr($sdata['roll'], 5) == '100')
    {
      continue;
    }
} 
在行$sdata['roll'] = '20141000';中的

这应该是动态的,因为每当这个函数调用它做同样的事情时。

解决方案:你可以这样做,就像获取在db中插入的最后一个卷并为该卷执行+1。