# Eloquent 設定
### 設定可以大量新增的欄位
Eloquent 為了避免特定欄位(像是 id, created_at ...)被使用者故意傳入大量(Mass)資料去進行修改,所以 Eloquent 會自動保護欄位不被大量異動(Mass Assignment),像是:
~~~
// 新增
App\User::Create([
'first_name'=> 'KeJyun',
'last_name' => 'Hong',
'email' => 'kejyun@gmail.com',
]);
// 更新
$user = App\User::find('1');
$user->update([
'email' => 'hello@gmail.com',
]);
~~~
如果我們需要異動這些欄位,需要在 Model 裡面設定 `$fillable` 的欄位,這樣就可以使用大量資料的方式,去新增或異動資料表欄位資料。
~~~
class User extends Model {
protected $fillable = ['first_name', 'last_name', 'email'];
}
~~~
### 設定需要被保護的欄位
我們也可以使用 `$guarded` 指定某些欄位需要被保護,能被大量新增或異動
~~~
class User extends Model {
protected $guarded = ['id', 'password'];
}
~~~
我們也可以設定所有欄位都不能被大量新增或異動
~~~
class User extends Model {
protected $guarded = ['*'];
}
~~~
### 設定欄位為時間資料欄位
我們可以很簡單的使用 Carbon 去做時間的資料處理,預設的 `created_at` 與 `updated_at` 是使用 Carbon 當作儲存的資料格式
~~~
$article = \App\Article::find(1);
// created_at = '2014-03-18 23:59:59'
// 取得 created_at 年份
// 2014
dd($article->created_at->year);
// 取得 created_at 月份
// 03
dd($article->created_at->month);
// 取得 created_at 6 天後的時間
// 2014-03-24 23:59:59
dd($article->created_at->addDays(6));
// 取得 created_at 格式化為 Y-m 的時間
// 2014-03
dd($article->created_at->format('Y-m'));
// 取得 created_at 格式化為人可閱讀的時間
// 1 year ago
dd($article->created_at->diffForHumans());
~~~
若我們自己新增了時間的欄位像是 `published_at`,則 Model 沒有自動將此欄位的資料設為 Carbon 的資料格式
我們可以在 Model 中設定 `$dates` 欄位中的資料,可以指定欄位資料格式為 Carbon 的資料格式
~~~
class Article extends Model {
protected $dates = ['published_at'];
}
~~~
### 設定資料庫的連線
我們也可以使用 `$connection` 指定模型需要用哪個資料庫連線去做查詢
~~~
class User extends Model {
protected $connection = 'custom_connection_name';
}
~~~
### 設定主鍵不要自動新增
使用 Eloquent 去建立模型(Model)時,預設主鍵會使用自動新增(Auto-increment)的方式去新增,若要自行定義主鍵時,則要設定 `$incrementing` 為 `false`,將自動新增的功能關閉~
~~~
class User extends Model {
public $incrementing = false;
}
~~~
### 設定主鍵欄位名稱
使用 Eloquent 去建立模型(Model)時,預設會將主鍵欄位名稱設為 `id`,若有需要異動主鍵欄位名稱的話,則要設定 `$primaryKey` 變數,設為自行定義的欄位名稱
~~~
class User extends Model {
protected $primaryKey = 'my_primary_column_name';
}
~~~
### 參考資料
- [Eloquent 101 - Laracast](https://laracasts.com/series/laravel-5-fundamentals/episodes/8)
- [Dates, Mutators, and Scopes - Laracast](https://laracasts.com/series/laravel-5-fundamentals/episodes/11)
- [Eloquent ORM - Laravel.tw](http://laravel.tw/docs/5.0/eloquent)
- 介紹
- 環境
- .env 檔案
- 資料庫
- Migration (遷移)
- Eloquent Model (模型)
- 設定
- 關聯
- 魔術函式
- 使用 Eloquent
- 常見問題
- 無法取得查詢 Log
- 使用大量資料的方式新增時無法新增
- 使用中繼模型繼承 Eloquent 模型造成無法使用大量資料新增
- PostgreSQL
- 安裝 PostgreSQL ODBC driver
- HTTP
- 請求
- 中介層 (Middleware)
- 視圖 (View)
- 服務
- 認證登入(Auth)
- 郵件(Mail)
- 使用 Gmail 寄信
- 使用 Mailgun 寄信
- 隊列(Queue)
- database
- 非同步(async)
- 輔助方法 (Helpers)
- 自定義輔助方法
- 單元測試 (Unit Test)
- Post CSRF 錯誤
- 錯誤與日誌
- 在單元測試顯示例外
- 日誌記錄層級
- 日誌巨集
- 加密
- 雜湊
- Elixir
- 使用 Elixir 合併 CSS 與 JS
- 設計模式
- 服務容器
- PSR
- Model 模型
- 學習資源
- 套件
- Debug
- Artisan tail
- 工具
- Carbon
- 設計模式
- 其他常見問題
- Call to undefined method getCachedCompilePath()
- 變更專案目錄名稱導致 View 無法讀取
- Laravel 5.1 目錄結構異動
- 學習資源
- 官方
- 社群
- 會議議程
- 工作
- 文件
- 文章
- 套件
- 服務工具
- 教學影片
- 教學網站
- 編輯開發
- 主機
- 成功案例