Eloquent ORM | Laravel 4 入門 - Tony

文章推薦指數: 80 %
投票人數:10人

Eloquent ORM. Object Relational Mapping (ORM) 是一種物件和關聯對映的技術。

物件指的是物件導向程式語言中的物件,關聯則是關聯式資料庫,ORM 是一個中間轉換的 ... Laravel4入門 前言 1. Laravel介紹 1.1. 認識Laravel 1.2. 開始之前 2. 進入Laravel的世界 2.1. 安裝Composer 2.2. 建立Laravel專案 2.3. Laravel框架目錄說明 2.4. Artisan常用指令說明 3. 基本配置設定 3.1. 設定伺服器 3.2. 建立開發環境 3.3. 設定Laravel網站 4. 動手做-入門 4.1. Laravel的MVC模型 4.2. 使用Route 4.3. 使用View 4.4. 使用Controller 4.5. 使用Migration和Model 4.6. 使用Form 4.7. 第一個小專案:迷你部落格 5. 動手做-進階 5.1. Route進階 5.2. Blade樣板系統 5.3. Form進階 5.4. Form的資料驗證 6. 資料庫 6.1. QueryBuilder 6.2. EloquentORM 6.3. SchemaBuilder 6.4. Migrations&Seeding 7. 常用功能實作 7.1. 登入驗證 7.2. 在地化(多國語言) 7.3. 分頁 7.4. 寄信 8. 附錄 8.1. 移除public結尾 8.2. SublimeText的開發套件 PoweredbyGitBook A A 襯線體 無襯線體 白色 棕褐色 夜間 分享到Twitter 分享到Google 分享到Facebook 分享到Weibo 分享到Instapaper Laravel4入門 EloquentORM ObjectRelationalMapping(ORM)是一種物件和關聯對映的技術。

物件指的是物件導向程式語言中的物件,關聯則是關聯式資料庫,ORM是一個中間轉換的角色,讓原本必須直接接觸關聯式資料庫的部份,轉換成相對映的物件,這樣就能使用物件來操控資料庫,在開發上會比較直覺,也比較容易使用。

在Laravel框架中,使用EloquentORM。

基本使用 定義模型(Model) Model預設放在app/models目錄下。

例如:app/models/Post.php,內容如下:
當然,你也可以自行指定資料表的名稱:
當然也可以自行定義primaryKey屬性去改變預設的名稱,例如: protected$primaryKey="myid"; 當你的Model建立時,EloquentORM會自動幫你加入兩個欄位updated_at和created_at,這兩個欄位會記錄該筆紀錄的更新時間及建立時間(第一次建立時兩者時間相同)。

如果你沒有這個需要,可以告訴EloquentORM不要建立,將$timestamps屬性設為false即可: public$timestamps=false; 取得整個資料表的資料 $posts=Post::all(); 回傳陣列資料。

Post是該Model類別的名稱,all()方法會回傳整個資料表的資料。

透過Primarykey取得一筆紀錄 $post=Post::find(1); 使用find()方法,及參數為id的值,回傳Post物件。

註:在前一節QueryBuilder中所介紹的方法全都可以在EloquentORM中找到相同名稱的方法。

它們分屬Illuminate/Database/Query/Builder.php及Illuminate/Database/Eloquent/Builder.php兩個類別,都有實作同樣的方法名稱。

透過Primarykey取得一筆紀錄,或丟出例外 假如你需要在找不到資料時顯示404等的錯誤頁面,可以讓EloquentORM丟出例外,使用 $post=Post::findOrFail(1); 或 $post=Post::where('title','=','abc')->firstOrFail(); findOrFail()和firstOrFail()方法會丟出例外。

那丟出的例外要由誰接手處理呢?打開app/start/global.php檔案,在最前面加入:
接著在ApplicationErrorHandler(找註解可看到)區塊中原本的App::error之後加上: App::error(function(ModelNotFoundException$e) { returnResponse::make('NotFound',404); }); 這樣EloquentORM丟出的例外就會以404的錯誤頁面(這裡顯示'NotFound'文字)來表示。

如果要自訂錯誤頁面,可以改成 returnResponse::view('errors.missing',array(),404); 然後建立404的view,app/views/errors/missing.blade.php: 404 404

條件查詢 使用where來做條件查詢, $posts=Post::where('id','>',1)->get(); 傳回陣列。

用法都和之前介紹的QueryBuilder均相同。

大量指派(mass-assignment) 基於安全的考量,EloquentORM預設是禁止大量指派資料到資料庫中,例如使用迴圈來一次新增很多的資料。

如果你有大量指派的需求,必須使用fillable屬性:
fillable如果是白名單,那相反的也可指定某個欄位"不允許"大量指派的黑名單,透過guarded屬性: protected$guarded=['id']; 這樣'id'這個欄位就不允許大量指派。

如果要保護所有欄位都不能被大量指派: protected$guarded=array('*'); Insert,Update,Delete Insert(新增) new一個Model所代表的類別,就是預備新增一筆資料: $post=newPost; $post->title='Hello~~'; $post->save(); 在新增資料後可以立即取得該筆資料的id: $postId=$post->id; 你也可以使用Create方法來新增資料: $post=Post::create(['title'=>'Hello~~')); 前提是,你的Model必須設定fillable或guarded其中一個屬性。

Update(更新) 先找到要更新的資料才能更新: $post=Post::find(1); $post->title='Hi~~'; $post->save(); 如果你有使用timestamps欄位,而且你只想更新它的時間(updated_at欄位),你可以"碰一下": $post->touch(); 刪除(Delete) $post=Post::find(1); $post->delete(); 或使用destroy方法: Post::destroy(1); Post::destroy(1,2,3); 參數是id。



請為這篇文章評分?