首頁查詢功能的一次實現過程
本次的目的是完成學生選課系統的首頁查詢功能的實現,
具體要求:
1.在首頁顯示當前周的課表。
2.顯示所有的學生每節課的有無情況。
效果圖如下
初始思路:
1.查詢當前學期的所有課程
2.查詢本週,周幾,第幾節課的課程id
3.通過課程id查詢有那些學生選擇了該課程
4.將查詢到的學生id設為有課,其餘為無課,並將資料傳輸到V層
依照以上方法,實現的時候才發現很複雜,而且由於多層查詢需要用迴圈套迴圈的方法,
所以最後程式碼不但很長,而且出了一點錯誤就很難改過來,把自己繞了進去
// 獲取資料庫資訊,並傳到V層顯示。 public function index() { // 查詢當前學期 $term = Term::where('state',1)->find(); // var_dump($term->id); // 獲取當前學期的所有課程 $courseId = Course::where('term_id',$term->id)->column('id'); // var_dump($courseId); // 獲取本週的課程 $classTime = ClassTime::where(['course_id' => $courseId])->select(); // var_dump($classTime); // var_dump(strtotime(date('Y-m-d'))); // var_dump(strtotime($term[0]['start_time'])); $week = intval((strtotime(date('Y-m-d')) - strtotime($term->start_time))/7/86400); // var_dump($week); $classTime = $classTime->where('week',$week); // var_dump($classTime); $studentName = Student::where('state',1)->column('name'); // var_dump($studentName); for ($j=0; $j < 7; $j++) { for ($i=0; $i < 5; $i++) { $num = count($studentName); // var_dump($studentName[0]); for ($k=0; $k < $num; $k++) { $home = new Home; $home->day = $j+1; $home->period = $i+1; $home->name = $studentName[$k]; $home->state = 0; if (!is_null($classTime)) { $classTime = $classTime->where('day',$j+1); $classTime = $classTime->where('period',$i+1); // var_dump($classTime); // 獲取學生Id $stuCoursId = StudentCourses::where(['courses_id' => $classTime->column('course_id')])->column('student_id'); $stuState = Student::where(['id' => $stuCoursId])->column('state'); // var_dump($home); // var_dump($stuState[0]); if (!is_null($stuCoursId) && in_array(1, $stuState)) { $stuName = Student::where(['id' => $stuCoursId],['state',1])->column('name'); // var_dump($stuName); // $home->save(); if (!is_null($home->where(['name' => $stuName])->find())) { $home->where(['name' => $stuName])->find()->state = 1; } } } $lists[$j][$i][$k] = $home; } // var_dump($home); } // var_dump($home); } $week = ['週一','週二','週三','週四','週五','週六','週日']; var_dump($lists[0][0][0]); // var_dump($list); $this->assign('week',$week); $this->assign('lists',$lists); return $this->fetch(); }
這部分程式碼雖然實現了功能,但是明顯不是老師要得效果,主要是沒有面向物件的思想,
因此,後面老師講了一種面向物件的思想
思路如下:
1.首先設立三個陣列:周幾,第幾節,學生。這三個陣列分別有一個name一個id屬性
2.將陣列資料傳輸到V層,並顯示
3.利用這三項資料,呼叫一個getHasCourse的方法,直接查詢學生是否有課,並返回true或faluse
按照以上思路,發現事情變得很簡單。
首先,C層的查詢和建立兩個關於周次和節次的陣列
然後,V層顯示資料
其中的eq裡面就是呼叫的getHasCourse方法,該方法寫在M層裡面,傳入的引數為學生id,周次id,節次id
經過這麼寫,發現思路很清晰,每層的功能也能很明白的瞭解到,而且程式碼也並不複雜,甚至一個for迴圈都沒有用到。
總結
這次的首頁查詢功能,讓我更多的瞭解到了面向物件的思想,但是老師講出來之後明白了和自己本身就有的還是不一樣的。
思想轉變不是那麼的容易,還需要多加練習。