Laravel课程表的数据库设计与实现
来源:互联网 发布:金中投证券软件下载 编辑:程序博客网 时间:2024/05/22 14:33
日常生活中常见的课程表到了PHP里确实是一个小难题,这里分享一些我设计课程表的经验,下列方式只列出大体实现方式,具体的大家要自己学习哦。
首先,我们先要搞定表结构
设计字段:id(自增) class_id:班级ID teacher_id:上课老师的ID(通过该老师能查到他的课程) day:星期几 section:第几节
字段设计好后,我们发现一周,每天按照八节课算,5天的话一共有40节课,那就要给数据库插入40条记录。楼主对比了很多方式后发现,其实这种方式除了插入的多一些,别的都比其他的方式更简单一些。
那么创建完数据表,我们就要创建我们的表格了,创建表格要求你能给表格每个格子或格子里的东西加上标识(数字),并且自己能够操控这些标识,这里$t就是我的标识,我每创建一个格子,都有他的序号,到时候操作这个序号,就是操作对应的格子。有了这个基础,你会得心应手!!!
<table border='1'> <tr> <th>时间</th> <th>节次</th> <th>周一</th> <th>周二</th> <th>周三</th> <th>周四</th> <th>周五</th> <th>周六</th> <th>周日</th> </tr> <?php for ($i=0; $i < 8; $i++) { echo "<tr>"; for ($k=0; $k < 9; $k++) { $t = $i*9+$k; if($t == $i*9+1){ echo "<td>".($i+1)."</td>"; }else if($t == $i*9){ echo "<td>"."TIME"."</td>"; }else if($t == $i*9+2){ echo "<td>"."周一".$i."</td>"; }else if($t == $i*9+3){ echo "<td>"."周二"."</td>"; }else if($t == $i*9+4){ echo "<td>"."周三"."</td>"; }else if($t == $i*9+5){ echo "<td>"."周四"."</td>"; }else if($t == $i*9+6){ echo "<td>"."周五"."</td>"; }else if($t == $i*9+7){ echo "<td>"."周六"."</td>"; }else if($t == $i*9+8){ echo "<td>"."周日"."</td>"; } } echo "</tr>"; } ?></table>
接下来,我们设计创建课程表的表单,teachers我是从后台拿到老师然后传到模版,别忘了把class_id也传过来!
<form action="{{ URL('schedule') }}" method="POST" enctype="multipart/form-data"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <input type="hidden" name="class_id" value='{{$classid}}'> <table border='1'> <tr> <th>时间</th> <th>节次</th> <th>周一</th> <th>周二</th> <th>周三</th> <th>周四</th> <th>周五</th> <th>周六</th> <th>周日</th> </tr> <?php for ($i=1; $i <= 8; $i++) { $w[$i] = "w".$i; echo "<tr>"; for ($k=0; $k < 9; $k++) { $t = $i*9+$k; $sd = 'sd'.$t;//每个select上的坐标,section day简写 if($t == $i*9+1){ echo "<td>".($i)."</td>"; }else if($t == $i*9){ echo "<td>".$time[$w[$i]]."</td>"; }else if($t == $i*9+7 || $t==$i*9+8){ echo "<td>休息</td>"; }else { echo "<td>"; echo "<select name=".$sd.">"; echo "<option value='1'>请选择</option>"; foreach($teachers as $t){ echo "<option value=".$t['value'].">"; echo $t['name']; echo "</option>"; } echo "</select>"; echo "</td>"; } } echo "</tr>"; } ?> </table> <input type="submit" value="保存" class='btn btn-success'> </form>
然后我们有遇到了难题,怎么存储呢?其实就是根据你的格子序号来操作的,不同的序号对应不同的星期和节次,规律很好找!
public function store(Request $request){ $exist = Schedule::where("class_id",Input::get('class_id'))->first(); if($exist){ return Redirect::back()->withInput()->withErrors(ClassToGrade(Input::get('class_id')).'已有课程表,只允许修改,不允许重复创建'); return false; }else{ for($i = 1;$i<=79;$i++){ $sd = 'sd'.$i; if(!Input::get($sd) || Input::get($sd)==0 || Input::get($sd)==''){ }else{ $schedule = new Schedule; if($i%9 ==2){ //计算周是周几 $schedule->days = 1; //周一 }else if($i%9 == 3){ $schedule->days = 2; //周二 }else if($i%9 == 4){ $schedule->days = 3; //周三 }else if($i%9 == 5){ $schedule->days = 4; //周四 }else if($i%9 == 6){ $schedule->days = 5; //周五 }else{ } if($i>= 11 && $i<=15){ //计算是第几节 $schedule->section =1; $schedule->teacher_id = Input::get($sd); }else if($i>=20 && $i<=24){ $schedule->section =2; $schedule->teacher_id = Input::get($sd); }else if($i>=29 && $i<=33){ $schedule->section =3; $schedule->teacher_id = Input::get($sd); }else if($i>=38 && $i<=42){ $schedule->section =4; $schedule->teacher_id = Input::get($sd); }else if($i>=47 && $i<=51){ $schedule->section =5; $schedule->teacher_id = Input::get($sd); }else if($i>=56 && $i<=60){ $schedule->section =6; $schedule->teacher_id = Input::get($sd); }else if($i>=65 && $i<=69){ $schedule->section =7; $schedule->teacher_id = Input::get($sd); }else if($i>=74 && $i<=78){ $schedule->section =8; $schedule->teacher_id = Input::get($sd); }else{ } $schedule->class_id = Input::get('class_id'); $schedule->save(); } } return Redirect::back()->withInput()->withErrors(ClassToGrade(Input::get('class_id')).'课表创建成功'); } }
创建好了,那么,修改时候,我想要选好的课程就在那,不用再次点选,怎么让选框默认选好我选中的课程呢?毕竟我的记录有40条。。那我们就要设置一个自增的key(我这里叫做$s),让他从0增加到39(一共40个)
首先,跳转到修改页:
public function edit($id){ $class_id = $id; $time = CourseTime::where("school_id",userSchool())->first(); $teachers = ClassTeacher::where("class_id",$class_id)->get(); foreach($teachers as $key=>$t){ $teacher[$key]['value'] = $t->teacher_id; $teacher[$key]['name'] = TeacherToCourse($t->teacher_id).":".TeacherConvert($t->teacher_id); } $schedules = Schedule::where("class_id",$class_id)->get(); $k = 1; foreach($schedules as $s){ $schedule[$k]['value'] = $s->teacher_id; $schedule[$k]['name'] = TeacherToCourse($s->teacher_id).":".TeacherConvert($s->teacher_id); $k++; } return view("home.schedule.edit") ->withClassid($class_id) ->withTime($time) ->withTeachers($teacher) ->withSchedules($schedule); }
接下来,模版里面:
<table border='1'> <tr> <th>时间</th> <th>节次</th> <th>周一</th> <th>周二</th> <th>周三</th> <th>周四</th> <th>周五</th> <th>周六</th> <th>周日</th> </tr> <?php $s = 1; //课程计数,这里从1开始是因为我跳转修改页时设置的第一项是1 for ($i=1; $i <= 8; $i++) { $w[$i] = "w".$i; echo "<tr>"; for ($k=0; $k < 9; $k++) { $t = $i*9+$k; $sd = 'sd'.$t;//每个select上的坐标,section day简写 if($t == $i*9+1){ echo "<td>".($i)."</td>"; }else if($t == $i*9){ echo "<td>".$time[$w[$i]]."</td>"; }else if($t == $i*9+7 || $t==$i*9+8){ echo "<td>休息</td>"; }else { //进来这里s才会增加,因为40节课所以进来40次,所以s一共增加40次,对应40条记录 echo "<td>"; echo "<select name=".$sd.">"; foreach($teachers as $t){ if( $t['value'] == $schedules[$s]['value']){ //<span style="font-family: Arial, Helvetica, sans-serif;">让每条记录去匹配选项里的老师的id,如果一样就selected</span> echo "<option selected value=".$t['value'].">"; echo $t['name']; echo "</option>"; }else{ echo "<option value=".$t['value'].">"; echo $t['name']; echo "</option>"; } } echo "</select>"; echo "</td>"; $s++; } } echo "</tr>"; } ?> </table> <input type="submit" value="保存" class='btn btn-success'> </form>
public function update(Request $request){ //最简单的方法是删除原来的重新建一个,没有之一,但我们这里还是去修改数据 $class_id = Input::get('class_id'); $schedules = Schedule::where('class_id',$class_id)->get();//把那40条数据找出来 $k=0; for($i = 1;$i<=79;$i++){ $sd = 'sd'.$i; if(!Input::get($sd) || Input::get($sd)==0 || Input::get($sd)==''){ }else{ $schedules[$k]->teacher_id = Input::get($sd); //传40个值,所以进来40次,第一个传给$k=0的,下一个传给$k=1的,以此类推,逐条完成修改 $schedules[$k]->save(); $k++; } } return Redirect::back()->withInput()->withErrors(ClassToGrade(Input::get('class_id')).'课表修改成功'); }
0 0
- Laravel课程表的数据库设计与实现
- 课程表的实现
- Android 课程表的实现
- Android课程表的设计开发
- Android课程表的设计开发
- Android仿超表的课程表实现
- 手机端课程表的实现——仿超级课程表
- 不一样的课程表,不一样的Excle--用Excle进行设计(20):顺序结构的实现
- 不一样的课程表,不一样的Excle--用Excle进行设计(20):顺序结构的实现
- 不一样的课程表,不一样的Excle--用Excle进行设计(21):层次结构的实现
- 不一样的课程表,不一样的Excle--用Excle进行设计(22):网状结构的实现
- 不一样的课程表,不一样的Excle--用Excle进行设计(22):网状结构的实现
- 数据库管理系统的设计与实现
- 不一样的课程表,不一样的Excle--用Excle进行设计(30):排版与字体
- 不一样的课程表,不一样的Excle--用Excle进行设计(31):排版与字间距
- 不一样的课程表,不一样的Excle--用Excle进行设计(32):排版与分栏
- 不一样的课程表,不一样的Excle--用Excle进行设计(61):数据项与数据项
- 超级课程表课表的界面的实现
- Android studio 导入项目
- win32汇编 屏幕截图保存BMP 学习笔记<第四篇>之生成BMP文件
- Java并发编程:深入剖析ThreadLocal
- <<web>>漂亮的相册(一)
- 解决:[Ljava.lang.Object; cannot be cast to com.sinone.domain.StorageCount
- Laravel课程表的数据库设计与实现
- apache httpcompontens之HttpAsyncClient使用
- mac 开发环境配置之homebrew
- android项目打包成jar
- HorizontalListView 横向listview
- Delete log files longer than 45 days
- 实用微博链接
- 15.4.1 杠杆利用类型参数推断
- 1153 - Paquet plus grand que 'max_allowed_packet' (navicat)