[Laravel] Eloquent 101

Eloquent 這段教學有點跳躍,跟不太上節奏
所以有點短,之後有其他想法再補充


根據官網說明
Laravel 的 Eloquent ORM 提供了漂亮、簡潔的 ActiveRecord 實作來和資料庫互動
每個資料庫表有一個對應的「模型」可以用來跟資料表互動
你可以透過模型查詢資料表內的資料,以及新增記錄到資料表中

簡單來說就是,你可以當作資料庫互動的介面,如phpmyadmin之類
第一步就是

php artisan make:model {model_name}

這個指令會在 \helloLaravel\app\Task.php 下建立一個檔案
同時該檔案會繼承類別 Illuminate\Database\Eloquent\Model;
並儲存在命名空間 App 中:namespace App;
預設使用的資料表就是{model name}

也可以在class內
定義一個 protected $table = {new_table}; 用來指定自訂的資料表

預設情況下,Eloquent 預期資料表會有 created_at 和 updated_at 欄位
如果你不希望讓 Eloquent 來自動維護這兩個欄位
在class內設定 public $timestamps = false;

這邊還提供一個很方便的用法是
php artisan make:model {model name} -m
-m 代表的就是建立migration檔案
也可以用 --migration

Laravel artisan 的 tinker 是一個 REPL (read-eval-print-loop)
REPL 是指 交互式命令行介面,它可以讓你輸入一段程式碼去執行
並把執行結果直接顯示在命令行界面裡。
php artisan tinker
可以進入介面
讓我們試看看以下的指令看會出現什麼事情?

App\Task::all()App\Task::where('id', '>', '1')
->get();App\Task::pluck('body');

分別是
顯示全部資料、印出 id > 1 的資料、印出所有 body 欄位
hmmm 看起來就是個 phpmyadmin 呢
一方面是方便我們測試 sql 語句
並且,因為我們有繼承了 Eloquent
所以這些命令可以直接作為查詢方法

例如我們之前在 router 做過
$task = DB::table('tasks')->find($id);

有了 model 後我們可以把它取代成
$task = App\task::find($id);

結果是都一樣的!

2018/04/11
補充:根據官網說明
資料表名稱
請注意,我們並沒有告訴 Eloquent Flight 模型該使用哪一個資料表。除非明確地指定其他名稱,不然類別的小寫、底線、複數形式會拿來當作資料表的表單名稱。所以,這個案例中,Eloquent 將會假設 Flight 模型儲存記錄在 flights 資料表。你可以在模型上定義一個 table 屬性,用來指定自訂的資料表
居然有這種猥褻的東西,難怪我怎麼想怎麼對不上
怎麼會抓 model 名稱當對應的 table 名稱,那個 s 怎麼去了 XD

留言