---
# System prepended metadata

title: Eloquent CRUD

---

# Eloquent CRUD


Restful
為一種純粹使用URL網址來傳遞資訊的機制，比如/photos/1/edit

Resource Restful 路由規則


生成路由規則的寫法
//routes/web.php
Route::resource('photos','App/Http/Controllers/PhotoController');
生成對應路由規則的控制器與方法
php artisan make:controller PhotoController --resource

新增資料
//使用Item物件的屬性來新增
$item = new Item;
$item->title = '手機一台';
$item->price = '15000';
$item->pic = 'https://member.ithome.com.tw/avatars/88232?s=ithelp';
$item->enabled = 1;
$item->size = 'L';
$item->email = 'admin@demo.com';
$item->save();

//使用Item建構子來新增
$item = new Item([
    'title' => '手機2台',
    'price' => '15000',
    'pic' => 'https://member.ithome.com.tw/avatars/88232?s=ithelp',
    'enabled' => 1,
    'size' => 'L',
    'email' => 'admin222@demo.com'
]);
$item->save();

//使用Item的create()來新增
$data = [
    'title' => '手機4台',
    'price' => '15000',
    'pic' => 'https://member.ithome.com.tw/avatars/88232?s=ithelp',
    'enabled' => 1,
    'size' => 'L',
    'email' => 'admin444@demo.com'
];

$item = Item::create($data);//要注意Mass Assignment保護機制
Mass Assignment
當鍵入資料是以陣列的方式，而且是使用模型的create()的話，通常都會觸發Mass Assignment防護機制，預設所有的欄位都會被保護

如要關閉欄位的保護，進到Model檔案內，如App\Models\Item.php，加入以下屬性

protected $fillable = ['白名單欄位名'];
protected $guarded = ['黑名單欄位名'];
查詢資料
單筆資料
//用流水號進行查詢，找不到就算了
$item = Item::find($id);

//用流水號進行查詢，找不到會報錯
$item = Item::findOrFail($id);

//查詢有啟用的商品,取出第一個
$item = Item::where('enabled',true)->first();
多筆資料
//取得items表格的所有資料
$items = Item::get();

//取得items表格的所有資料，並依created_at欄位由大至小排序
$items = Item::orderBy('created_at','desc')->get();
        
//取得items表格的所有enabled欄位為true的資料
$items = Item::where('enabled',true)->get();
修改資料
得到資料參考後，設定欄位新屬性值，最後呼叫save()更新永續層(資料庫)

第一種作法
$item = Item::find($id);
$item->price = 0;
$item->save();

第二種作法
$song = Song::updateOrCreate(['id'=>$song->id],['name'=>'Song99']);
刪除資料
//使用資料參考來刪除
$item->delete();

//使用主鍵來刪除
Item::destroy($item->id);
Route Model Binding
為你省去下達find()，用主鍵找資料的步驟

Step 1.將路徑參數改為Model名稱

//routes/web.php

Route::get('/itemdelete/{item}','App\Http\Controllers\ItemController@destroy');
Step 2.變更Action的參數列，補上模型類別與名稱

//app/Http/Controllers/ItemController.php

public function destroy(Item $item)
Step 3.為模型類別加入白/黑名單

//app/Models/Item.php

//設定黑名單為空
protected $guarded = [];

//設定白名單欄位
protected $fillable = ['title','price'...];
常見問題
Q1.如何判斷查詢完所給的變數是集合還是物件?

A.問自己所使用的查詢方法有無可能拿到多筆資料，只要有可能，一定是集合，比如all().get()屬之，否則則必然為物件

補充資料
用Token取代Git帳密的做法

https://你的帳號:你的TOKEN@github.com/javck/voyage.git

關於Restful的說明

https://progressbar.tw/posts/53

發表於  HackMD
 268
讚賞 收藏 訂閱