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
原创粉丝点击