public static function boot()
 {
     parent::boot();
     // 刪除相關排課設定
     static::deleting(function ($course) {
         $courseUnit = Courseunit::where('course_id', '=', $course->course_id)->delete();
     });
 }
 public static function boot()
 {
     parent::boot();
     static::saved(function ($classes) {
         self::$lastClassesId = $classes->classes_id;
     });
     // 將導師的班級資料設定為0,刪除排課設定
     static::deleting(function ($classes) {
         $teacher = Teacher::where('classes_id', '=', $classes->classes_id)->update(array('classes_id' => 0));
         $courseUnit = Courseunit::where('classes_id', '=', $classes->classes_id)->delete();
     });
 }
 public static function boot()
 {
     parent::boot();
     static::saved(function ($teacher) {
         self::$lastTeacherId = $teacher->teacher_id;
     });
     // 將班級的導師資料設定為0,刪除排課設定
     static::deleting(function ($teacher) {
         $classes = Classes::where('teacher_id', '=', $teacher->teacher_id)->update(array('teacher_id' => 0));
         $courseUnit = Courseunit::where('teacher_id', '=', $teacher->teacher_id)->delete();
     });
 }
 public static function boot()
 {
     parent::boot();
     // 刪除相關排課設定
     static::deleting(function ($classroom) {
         $courseUnit = Courseunit::where('classroom_id', '=', $classroom->classroom_id)->delete();
     });
     // 如果沒設定可用時間,預設全部可以使用
     static::saving(function ($data) {
         if ($data->course_time == 0) {
             $data->course_time = str_repeat('1', 35);
         }
     });
 }
            return Redirect::to($url)->with('message', $message);
        });
    });
    /**
     * 計算課表
     */
    Route::group(array('prefix' => 'caculate', 'before' => 'auth'), function () {
        // 顯示計算課表表單
        Route::get('/', function () {
            return View::make('caculate');
        });
        // 執行計算課表
        Route::post('/', function () {
            $validator = FormValidator::caculate(Input::all());
            if ($validator->fails()) {
                return Redirect::to('caculate')->withInput()->withErrors($validator)->with('message', '輸入錯誤,請檢查');
            } else {
                $viewData['oldData'] = Input::all();
                $seedProgressHistory = Courseunit::caculate(Input::all());
                if ($seedProgressHistory[0] == 'error') {
                    $viewData['message'] = '排課發生衝突,請檢查以下的排課內容';
                    $viewData['errorTimetable'] = $seedProgressHistory[1];
                } else {
                    $viewData['message'] = '排課完成';
                    $viewData['seedProgressHistory'] = $seedProgressHistory;
                }
                return View::make('caculate')->with($viewData);
            }
        });
    });
}
 /**
  * 驗證排課單元
  */
 public static function courseUnit($data)
 {
     // 衝突檢查
     Validator::extend('conflict', function ($attribute, $data, $parameters) {
         /* Array參考
         		 [0][_token] => Yvw1pYLjZIm1BaiPJ1yTYKbs3Nl8T9zfkLesI0Bh
         		 [1][classes_id] => 4
         		 [2][course_id] => 9
         		 [3][count] => 1
         		 [4][classroom_id] => 0
         		 [5][combination] => 1
         		 [6][repeat] => 0
         		 [7][limit_course_time] => 1
         		 [8][course_time] => 10000001000000110000011000001100000
         		 [9][teacher_id] => 19
         		 */
         // 處理變數
         list(, $classes_id, $course_id, $count, $classroom_id, $combination, $repeat) = $parameters;
         $mode = end($parameters);
         $teacher_id = prev($parameters);
         if (substr($mode, 0, 4) == 'edit') {
             $courseUnitId = intval(substr($mode, 4));
             $mode = substr($mode, 0, 4);
         }
         if ($parameters[7] == 1) {
             $course_time = $parameters[8];
         } else {
             $course_time = 0;
         }
         // 限制排課時間少於設定節數
         if (substr_count($course_time, '1') < $count && substr_count($course_time, '1') != 0) {
             Session::flash('conflictError', '限制排課時間(共' . substr_count($course_time, '1') . '節)少於設定節數(' . $count . ')');
             return false;
         }
         // 組合節數大於設定節數
         if ($combination > $count) {
             Session::flash('conflictError', '組合節數(' . $combination . ')大於設定節數(' . $count . ')');
             return false;
         }
         // 同天不排課,但是(排課節數 / 組合節數)超過5
         if ($repeat == 0 && $count / $combination > 5) {
             Session::flash('conflictError', '同天同班不重複排課,但是(排課節數 / 組合節數)超過5');
             return false;
         }
         // 教室可排課時間不足
         if ($classroom_id != 0) {
             $courseCount = 0;
             $courseUnitUseClassroom = array();
             foreach (Courseunit::where('classroom_id', '=', $classroom_id)->get() as $courseunit) {
                 $courseCount += $courseunit->count;
                 $courseUnitUseClassroom[] = $courseunit->teacher->teacher_name;
             }
             $classroom = Classroom::find($classroom_id);
             // 檢查是否為編輯模式
             if ($mode == 'edit') {
                 $courseUnit = Courseunit::find($courseUnitId);
                 if ($courseUnit->classroom_id == $classroom_id) {
                     $courseCount -= $courseUnit->count;
                 }
             }
             if (substr_count($classroom->course_time, '1') * $classroom->count - $courseCount - $count < 0) {
                 $teacherList = implode($courseUnitUseClassroom, ',');
                 Session::flash('conflictError', '教室《' . $classroom->classroom_name . '》可排課時間不足,目前有使用的老師:' . $teacherList);
                 return false;
             }
         }
         // 班級可排節數已滿
         $classesCourseCount = 0;
         foreach (Courseunit::where('classes_id', '=', $classes_id)->get() as $courseunit) {
             $classesCourseCount += $courseunit->count;
         }
         // 編輯模式
         if ($mode == 'edit') {
             $courseUnit = Courseunit::find($courseUnitId);
             if ($courseUnit->classes_id == $classes_id) {
                 $classesCourseCount -= $courseUnit->count;
             }
         }
         $classes = Classes::find($classes_id);
         if (substr_count($classes->year->course_time, '1') - $classesCourseCount - $count < 0) {
             Session::flash('conflictError', '班級《' . $classes->classes_name . '》可排課時間不足');
             return false;
         }
         return true;
     });
     $rules = array('teacher_id' => 'required|integer', 'course_id' => 'required|integer', 'classroom_id' => 'required|integer', 'count' => 'required|integer', 'combination' => 'required|integer|conflict:' . implode(',', $data), 'repeat' => 'required|integer', 'course_time' => 'numeric');
     $messages = array('required' => '此欄位必填', 'integer' => '必需為數字', 'conflict' => '排課衝突');
     return Validator::make($data, $rules, $messages);
 }
		        <th class="command sorttable_nosort">&nbsp;</th>	        		        
		    </tr>
		    @foreach ($teacherList as $teacherItem)
			    <tr>
			        <td class="teacher_name">
			        	{{ link_to('account/edit/' . $teacherItem->teacher_id . '/titleId/' . $teacherItem->title_id, $teacherItem->teacher_name, array('target' => '_blank')) }}
		        	</td>			       			       
			        <td class="teacher_course_count">
			        	{{ $teacherItem->teacher_course_count }}
			        	<?php 
$teacher_has_course_count = 0;
//導師:原班的課 - 科任 + 自己上別班的課
if ($teacherItem->classes_id != 0) {
    $teacher_has_course_count += substr_count($teacherItem->classes->year->course_time, '1');
    $teacher_has_course_count -= Courseunit::where('teacher_id', '<>', $teacherItem->teacher_id)->where('classes_id', '=', $teacherItem->classes_id)->sum('count');
    $teacher_has_course_count += Courseunit::where('teacher_id', '=', $teacherItem->teacher_id)->where('classes_id', '<>', $teacherItem->classes_id)->sum('count');
} else {
    // 科任:安排的課
    $teacher_has_course_count += $teacherItem->courseunit()->sum('count');
}
if ($teacher_has_course_count > $teacherItem->teacher_course_count) {
    $courseTimeDiffClass = 'plus';
} elseif ($teacher_has_course_count < $teacherItem->teacher_course_count) {
    $courseTimeDiffClass = 'minus';
} else {
    $courseTimeDiffClass = 'zero';
}
echo '(<span class="' . $courseTimeDiffClass . '">' . $teacher_has_course_count . '</span>)';
?>
			        </td>
			        <td class="classes">