在上一篇文章我們已經說明完這個API的目的及方向
本篇就來 share 一下實作
加深印象的同時也讓對 API 實作有興趣的捧油一起參考討論
產生model物件
php artisan make:model ChickenFilletShop -rmc
- r: 預先載入CRUD方法
- m: 預產生migration
- c: 預產生controller
完成指令後會看到以下畫面
ps. 指令有加入r變數,所以打開ChickenFilletShopController.php可以看到已經有很多方法寫在裡面。
ps. 參照路由指令看route list : php artisan route:list
ps. 這邊如果有在route.php加入Route::apiResource('chickenFilletShop', 'ChickenFilletShopController');
的話 就會有
意指: 如果打http://chickenfillet.test/api/chickenFilletShop
用 GET
http method的話, 就會route到 App\Http\Controllers\ChickenFilletShopController
的 index 方法
- 而我們若要新增一筆資料,就會用
POST
method來打store方法
使用 migration 產生 table
- Migration 可以想像成是 db 的版控,目的是為了讓團隊成員都能擁有一樣的 table,開發時才不會多東少西漏
- 參考資料: https://laravel.com/docs/6.x/migrations
- 在
產生 model 物件
的時候,由於加入了 -m,所以已經預產生 migration 檔案2019_12_23_095249_create_chicken_fillet_shops_table.php
migration 說明
up
: 指執行 migration 後會產生的table及欄位設定down
: 指在將 migration 給 rollback (有點像是 git 裡的reset)後會執行的動作-
為了達到前一篇文章:前言的目的,初步設定 table 欄位如下:
public function up() { Schema::create('chicken_fillet_shops', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedInteger('type_id')->comment('雞排分類'); $table->string('name')->comment('雞排店名'); $table->string('operation_time')->nullable()->comment('營業時間'); $table->string('area')->nullable()->comment('店家所在地區'); $table->boolean('chain_store')->default(false)->comment('是否為連鎖店'); $table->text('feature')->nullable()->comment('店家特色'); $table->text('phone_order')->nullable()->comment('可否電話訂餐/外送'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('chicken_fillet_shops'); }
migration 步驟
step 1
新增dbmac 用戶可以使用sequelPro
來新增database
step 2
設定.env
檔
在專案資料夾下的.env
檔內可以修改db相關設定
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=chicken_fillet // 剛剛用sequelPro新增的database
DB_USERNAME=root // 登入id
DB_PASSWORD= // 登入pw
step 3
執行 migration鍵入 command line php artisan migrate
接著在sequelPro
裡面就可以看到新增的table & 欄位了
這樣就完成 migration,並新增了名為chicken_fillet_shops
的 table,及相關的 controller了!
設定 Model 可以被批量賦值的屬性
為確保 db 的安全性,Laravel 須要我們設定批量賦值的屬性
也就是說如果現在如果前端要求更改 id , 但我們後端這邊並無將 id 屬性設定為可以批量賦值的話
系統就會報錯
namespace App;
use Illuminate\Database\Eloquent\Model;
class ChickenFilletShop extends Model
{
/**
* 可以被批量賦值的屬性。
*
* @var array
*/
protected $fillable = [
'type_id',
'name',
'operation_time',
'area',
'chain_store',
'feature',
'phone_order',
];
}
好的,以上就大略完成了db相關設置
若有任何不清楚或有誤解的地方可以隨時留言讓我知道
我很樂意回覆&修正!
系列文章
最後附上系列文章
- PHP + Laravel 雞排聯盟API實作: 前言
- PHP + Laravel 雞排聯盟API實作: 產出 table 及可供操作的物件
- PHP + Laravel 雞排聯盟API實作: CRUD 增刪改查