2013年9月4日 星期三

用 Eclipse 開發 Yii Web Application (八)

之前我們曾經提過這裡的資料表(tables) courses, students 與 teachers 都可以用 Gii 的 CRUD
自動幫我們把 controller 與 views 建立, 但 classes 卻沒辦法, 原因為何呢?
因為 courses, students 與 teachers 都是單一主鍵(primary key) 但 classes 是複合主鍵
(composite primary key), Gii CRUD(或 yiic) 沒那麼聰明可以幫我們把架構都建立好。
解決方法有兩個:

1. 將原本 classes 的複合主鍵 (course_no, student_no, semester) 都改成一般欄位, 再另外加
一個主鍵( 例如: class_no), 這麼就可以用 Gii 或 yiic 的 CRUD 幫我們建立基本的架構。

2. 還是保持原本資料表的 schema, 用手工的方式來完成。
我們這裡用第二種方法來示範給大家看。
首先複製原本用 Gii CRUD 產生的 controller 檔案與 views 目錄(這裡我們複製 courses 的相關
檔案)。
在 Eclipse 的 Package Explorer, protected/controllers/CoursesController.php 點滑鼠右鍵後,
選 Copy, 接著點 protected/controllers 再點滑鼠右鍵選Paste, 並更名為 ClassesController.php。 
同樣的方法複製 protected/views/courses 目錄並更名為 classes, 這樣就可以複製courses 下面
所有的檔案 (index.php, create.php, _form.php 等)。

然後修改相關 controller 與 views 的檔案內容, 首先我們修改 ClassesController.php
class CoursesController extends Controller 改成 class ClassesController extends Controller
接著修改所有 Courses 成為 Classes, 例如: $model=new Courses; 改成 $model=new Classes;
由於原先為單一主鍵, 在 Classes 裡是複合主鍵因此要改成 array 形態, 如下:
 'id'=>$model->course_no 成為 'id'=> array('course_no'=>$model->course_no,
            'student_no'=>$model->student_no, 'semester'=>$model->semester)

然後在所有以 id 為傳入參數的 action function, 從 $id 改成 array $id, 例如:
public function actionView($id) 改成 public function actionView(array $id)
在 views 裡面的相關檔案, 修改內容也跟上面 controller 大致相同, 大家可以試試。
改完後可以在瀏覽器中輸入 http://localhost/MyWebSite/index.php?r=classes 看看結果。

由於原本的 course_no 與 student_no 比較不容易瞭解, 因此這裡改成 course_name 與
student_name 做法可以參考我之前寫的用 Eclipse 開發 Yii Web Application (五)
我們試試看刪除一筆資料看看


沒有留言:

張貼留言