PHP + Laravel 雞排聯盟API實作: 產出 table 及可供操作的物件

by 班陳
Chicken_Affiliate

上一篇文章我們已經說明完這個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/chickenFilletShopGET 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

新增db

mac 用戶可以使用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相關設置
若有任何不清楚或有誤解的地方可以隨時留言讓我知道
我很樂意回覆&修正!

系列文章

最後附上系列文章

  1. PHP + Laravel 雞排聯盟API實作: 前言
  2. PHP + Laravel 雞排聯盟API實作: 產出 table 及可供操作的物件
  3. PHP + Laravel 雞排聯盟API實作: CRUD 增刪改查

You may also like

Leave a Comment