[Laravel 學習筆記] Eloquent 操作資料庫與 Model Binding 教學
本系列 Laravel 教學筆記將參酌 Laravel 4 From Scratch、Laravel 5 From Scratch、Laravel 官網和 Laravel 中文官網 相關資訊進行撰寫(以 Laravel 4 From Scratch 為主)。本篇將記錄使用 Eloquent 操作資料庫與 Model Binding 教學。Eloquent 是 Laravel 的 ORM(物件關聯對映 Object Relational Mapping,簡稱ORM)元件,負責與資料庫溝通,讓我們可以用物件導向的語法操作資料庫。
在上一篇文章我們先使用 Hard Coding 的方式(DB::table())和資料庫互動,現在我們要使用 Eloquent 用更簡潔的方式和資料庫互動,將資料庫的取出,並完成 Model Binding 效果。
在 Laravel 4 中的 app/models 資料夾下新增 Model.php 的檔案,內含 Model class,檔案內容如下(特別需注意的是 namespace 的使用):
<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Blog extends Eloquent {
// 先保持空白
}
我們再回到 app/controllers/MainController.php 中設定:
use App\Models\Blog;
class MainController extends \BaseController {
$blogs = Blog::get();
return View::make('blog.index', compact('blogs'));
}
public function showBlog($id) {
$blog = Blog::find($id);
return View::make('blog.blog', compact('blog'));
}
}
是不是發現簡潔許多?此時再打開瀏覽器:http://homestead.app:8000/blog,就可以看到同樣的結果!
接下來我們將在資料庫中加入 slug 這個欄位並進行 Model Bining 的教學。
首先,我們使用 php artisan migrate:rollback drop 掉原來的 table
並且在 migrate 檔案中新增 $table->string('slug')->unique();
然後重新使用 php artisan migrate 產生 table
此時我們再重新連回 vagrant ssh 虛擬機,使用 php artisan tinker,重新產生測試資料。然而目前我們已經有了 Eloquent Model ,所以可以不用再使用 DB::table('blogs')->insert([]); 方法。可以改用 App\Models\Blog::create([]); 或是 $blog = new App\Models\Blog(); 就可以動態新增屬性:
$blog.title = 'facebook worth billion dollars';
$blog.content = 'Mark is awesome';
$blog.slug = 'facebook-worth-billion-dollars';
$blog->toArray();
$blog->save();
App\Models\Blog::all()->toArray();
App\Models\Blog::all()->toJson();
更改 controller 和 routes 的 id 為 slug,並改為用 slug 擷取資料
$blog = Blog::whereSlug($slug)->first();
Route::model('blog', 'App\Models');
關於 Model Binding 中文官網更進一步說明:
路由模型綁定
模型綁定提供一個方便的方式將模型實體注入到你的路由中。例如,要注入一個使用者 ID 你可以注入符合給定 ID 的整個使用者模型實體。首先,使用
Route::model
方法可以指定作為參數的模型:綁定參數至模型
接著,定義一個路由並包括一個
{user}
參數:
既然我們綁定了
{user}
參數到 User
模型,則 User
實體就會被注入到路由內。因此,假定有一個請求送至 profile/1
則會注入一個 ID 為 1 的 User
實體。參考文件:
1. Laravel 中文官網
2. Laravel 官網
3. Laravel 4 From Scratch
4. Laravel 5 From Scratch
5. Using namespaces in Laravel 4
6. 設定 TABLE 之間 ONE TO ONE 的關係
7. Laravel-Eloquent ORM(上)
8. Laravel-Eloquent ORM(下)