Я создаю небольшое приложение 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?
Если вы пытаетесь увеличить базу данных, вы можете сделать это
public function incrementByOne($id){
$this->db->where('id',$id);
$this->db->set('roll','roll + 1', FALSE);
$this->db->update('mytable');
}
Ваша проблема здесь
$sdata['roll'] = '20141000';
for($i = 0; $i < 8; $i++)
{
$sdata['roll']++;
if(substr($sdata['roll'], 5) == '100')
{
continue;
}
}
в соответствии $sdata['roll'] = '20141000';
это должно быть динамически, как каждый раз, когда эта функция получает вызов, она делает то же самое.
Решение: Вы можете, например, выбрать последний бросок, вставленный в БД, и сделать +1 к этому броску.