新建資源檔案:php artisan make:model [] -rmc;
可快速創建一個Model並生成相應的控制器Controller、資源路由和資源視圖(Migration?)。
-rmc指的是:
r會生成一組RESTful風格的CRUD控制器方法,包括index()
、create()
、store()
、show()
、edit()
、update()
和destroy()
。
m表示生成一個對應該Model的資料庫遷移(Migration)。
c表示生成一個對應該Model的資源控制器(Resource Controller)。
Controller:提供用戶方法操作Model。
Model:提供相應功能,操作資料庫。
Migration:這是一個可以完成建立資料表結構的檔案。
RESTful風格的CRUD控制器方法,對應HTTP協定中多種不同的方法,觸發相應行為。官方說明
index():HTTP協定中的GET,用於查詢多筆資源。
create():HTTP協定中的GET,用於返回一個表單,讓用戶可以創建一個新的資源?❓
store():HTTP協定中的,用於新增資源。
show():HTTP協定中的GET,用於查詢單一資源。
edit():HTTP協定中的GET,用於查詢資源訊息的表單,以便用戶可以更新他❓
update():HTTP協定中的PUT/PATCH,用於更新資源。
destroy():HTTP協定中的DELETE,用於刪除資源。
建立後,將此專案添加至API路由表中(route\api.php),看route檔案夾中還有Web Routes網頁路由(做網頁的?)。
由於我們是做API所以將此檔案添加到api.php中:
//添加動物引用檔
use App\Http\Controllers\AnimalController;
//告知網址為animals時使用此控制器
Route::apiResource(‘animals’, AnimalController::class);
之後儲存並在此專案位置的終端機中輸入php artisan route:list可看到路由表多出這些功能。
🌟資料庫實作:
剛提到Migration(位置在:database\migrations)會建立資料表結構:
內有這兩個方法:
up:運行這個檔案的時候會執行up方法裡面的程式
down:如果要執行恢復資料庫流程時會跑down的方法(刪除資料表)
可參考Laravel官網說明:https://laravel.com/docs/9.x/migrations#columns
填寫完成後在專案位置使用終端機輸入:php artisan migrate
會建立相對應的表格。
在up中填入:
Schema::create(‘animals’, function (Blueprint $table) {
$table->id();
//以下新增
//表格方法->資料結構(‘欄位名稱’)->欄位設定
$table->unsignedBigInteger(‘type_id’)->nullable();
$table->string(‘name’);
$table->date(‘birthday’)->nullable();//nullable允許為空
$table->string(‘area’)->nullable();
$table->boolean(‘fix’)->default(false);
$table->text(‘description’)->nullable();
$table->text(‘personality’)->nullable();
$table->unsignedBigInteger(‘user_id’);
$table->softDeletes();//軟體刪除(假的刪除,註記時間,實際上資料保留在資料庫內)
$table->timestamps();//儲存建立與修改時間
});
在down填入:
Schema::dropIfExists(‘animals’);//刪除資料表
新建API控制器(添加與刪除):
public function store(Request $request)
{
//添加功能
//呼叫Animal Model並使用create方法把使用者請求資料用all()方法轉為陣列傳入create()方法中。
$animal = Animal::create($request->all());
//使用refresh方法查詢一次資料庫,得到該筆完整資料。
$animal = $animal->refresh();
//使用Laravel寫好的輔助方法response()。
//8使用:return response($animal, Response::HTTP_CREATED);
return response()->json($animal, Response::HTTP_CREATED);
}
public function destroy(Animal $animal)
{
//使用方法刪除資料 使用此方法成功刪除會獲得204。排隊等待處理202。找不到資源404。
$animal->delete();
//8使用:return response(null, Response::HTTP_NO_CONTENT);
return response()->noContent();
}
新增API功能(預設方法?):
use HasFactory;
/*
兩者擇一使用:
$fillable:用在限制哪些欄位可以被批量寫入。
$guarded:限制哪些欄位不可以被批量寫入。
@var array
*/
//複寫父類別屬性(fillable名稱不可隨意更改)
//不建議允許批量寫入,將在後續身份驗證章節修改這邊的設定。
protected $fillable = [
‘type_id’,
‘name’,
‘birthday’,
‘area’,
‘fix’,
‘description’,
‘personality’,
‘user_id’
];
並使用Postman測試觀察回傳HTTP狀態碼,並於資料庫中查看是否有無新增。