Eloquent ORM 快速指南

DB Facade vs Eloquent

當要進行複雜的原生SQL語法查詢才建議你使用 DB Facade,否則一般狀況下還是使用 Eloquent 來進行查詢為好

DB Facade 查詢完得到的會是陣列,而 Eloquent 查詢完得到的則是 Eloquent 物件

如果需要把資料陣列轉換成 Eloquent 是做得到的,透過 Query Builder 的 hydrate(),請看以下範例:

$userData = DB::select('SELECT * FROM users WHERE id > ?', [$userId]);
$userModels = User::hydrate($userData);

Active Record Pattern

任何技術宣稱有實作Active Record,須具備以下三個特性

  • 提供與資料表互動的能力
  • 可代表某一筆資料列
  • 可自我進行持久保存

Eloquent

  • 有實作Active Record,是一種ORM

ORM為Object Relationship Management,即用物件關聯的方式來管理資料庫

  • 透過定義模型的方式,讓你輕鬆管理資料庫
  • 一般每一個模型都指向一個表格

命名慣例

資料表格名稱

  • 包含多筆資料
  • 首字母小寫
  • 複數型
  • Ex:users

模型名稱

  • 代表一筆資料
  • 首字母大寫
  • 單數型
  • Ex:User

不按照命名慣例就要做更多的設定做為代價

生成模型

生成Model 類別
php artisan make:model Task

生成Model 類別,連帶生成對應的Migration檔案
php artisan make:model Task -m

Model進階屬性

指定該模型要對應的表格名稱,如果沒按照命名慣例才需要提供

protected $table = '新表格名稱';

將自定義的timestamps欄位自動轉換成Carbon型態

protected $dates = ['sell_at'];

指定表格的自定義主鍵欄位名稱

protected $primaryKey = 'user_id';

關閉主鍵的自增功能

protected $incrmenting = false;

呈上一個,如果主鍵不是int,就需要指定類型,比如字串

protected $keyType = 'string';

關閉created_at和updated_at的自動維護

protected $timestamps = false;

設定date型態的欄位被存進資料庫時的格式

protected $dateFormat = 'U';

修改預設的時間戳記欄位名稱

const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';

此模型需要連到其他的資料庫

protected $connection = 'connection-name';

測試範例

//routes/web.php
Route::get('/tasks','SiteController@showTasks');

//App\Http\Controllers\SiteController
public function showTasks(){
    return response()->json(Task::get())->setEncodingOptions(JSON_UNESCAPED_UNICODE);
}
Select a repo