```php class Topic extends Model { protected $fillable = [ 'topic', 'exam_id', 'opt1', 'opt2', 'opt3', 'opt4', 'ans', ]; public function exam() { return $this->belongsTo('App\Exam'); } } ``` ``` 3. 其中`App\Exam`也可以寫成`Exam::class`, 自 PHP 5.5 起,關鍵詞 class 也可用於類名的解析。使用 `類名::class` 可以得到一個字串,包含了類 ClassName 的完全限定名稱,如:`命名空間\類名`。 4. 此外,方法名稱`exam()`之後會變成集合的變數名稱,例如`$topic->exam` 5. 從測驗(exam)的角度來看,一個測驗可能會有多(hasMany)題目(topic),所以,開啟使用者的模型 `/app/Exam.php`,加入對題目的 `hasMany `關聯: ``` ```php class Exam extends Model { protected $fillable = [ 'title', 'user_id', 'enable', ]; protected $casts = [ 'enable' => 'boolean', ]; public function topics() { return $this->hasMany('App\Topic'); } } ``` ``` 6. 設定好關聯後,在取得 `$exam` 內容時,就會自動加入 `$exam->topics`資料陣列,所以,可以利用「 `$exam->topics['欄位名稱']`」或「 `$exam->topics->欄位名稱`」的方式來取得題目的相關資料。 7. 完整關聯請參考: ### 二、修改控制器 1. 編輯 `/專案/app/Http/Controllers/ExamController.php`,修改 `show()` 的方法,基本上,就是回到原狀而已,寫法更簡單: ```php public function show(Exam $exam) { return view('exam.show', compact('exam')); } ``` ### 三、修改樣板 1. 修改 `/專案/resources/views/exam/show.blade.php` ,把其中的`$topics` ```php @forelse ($topics as $key => $topic) ``` 改為`$exam->topics`即可,如: ```php @forelse ($exam->topics as $key => $topic) ``` [](https://github.com/tad0616/exam56/commit/9bc6bd210b0ddf1ab1fa1e37e27a87255a7cebe0)
```php class Exam extends Model { protected $fillable = [ 'title', 'user_id', 'enable', ]; protected $casts = [ 'enable' => 'boolean', ]; public function topics() { return $this->hasMany('App\Topic'); } } ``` ``` 6. 設定好關聯後,在取得 `$exam` 內容時,就會自動加入 `$exam->topics`資料陣列,所以,可以利用「 `$exam->topics['欄位名稱']`」或「 `$exam->topics->欄位名稱`」的方式來取得題目的相關資料。 7. 完整關聯請參考: ### 二、修改控制器 1. 編輯 `/專案/app/Http/Controllers/ExamController.php`,修改 `show()` 的方法,基本上,就是回到原狀而已,寫法更簡單: ```php public function show(Exam $exam) { return view('exam.show', compact('exam')); } ``` ### 三、修改樣板 1. 修改 `/專案/resources/views/exam/show.blade.php` ,把其中的`$topics` ```php @forelse ($topics as $key => $topic) ``` 改為`$exam->topics`即可,如: ```php @forelse ($exam->topics as $key => $topic) ``` [](https://github.com/tad0616/exam56/commit/9bc6bd210b0ddf1ab1fa1e37e27a87255a7cebe0)
進階搜尋