Автоматическое приращение данных при отправке в CodeIgniter

Я создаю небольшое приложение 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

Скриншот проблемного вывода, который я получаю:
Скриншот

Мой стол student, который имеет следующую структуру:

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

Обратите внимание, что roll не является столбцом первичного ключа и не является уникальным.

Как я могу решить мою проблему в контексте CodeIgniter?

0

Решение

Если вы пытаетесь увеличить базу данных, вы можете сделать это

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

Другие решения

Ваша проблема здесь

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

в соответствии $sdata['roll'] = '20141000'; это должно быть динамически, как каждый раз, когда эта функция получает вызов, она делает то же самое.

Решение: Вы можете, например, выбрать последний бросок, вставленный в БД, и сделать +1 к этому броску.

-1