我正在构建一个小的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 :(得分: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。