完成 user 的 API 後,接下來就來建立貼文的 API,而貼文的 API 就是符合典型的 RESTful 的所有標準 (含 index、show、store、update、destroy )。
之前 user 的部份有稍微介紹過 migration,但這次是從無開始的情形,因此就來詳細解釋每個步驟。
首先透過 php artisan 建立貼文的 migration ( 資料表名稱預設為 posts )
$ php artisan make:migration create_posts_table
除了上述指令之外,另外還可以自定義以下方式 :
自定義建立的資料表名稱
$ php artisan make:migration create_posts_table --create=[table_name]
指定某個已經存在的資料表 ( 以便只針對欄位做變動的動作 )
$ php artisan make:migration create_posts_table --table=[table_name]
完成之後的 migration 檔案為以下結果:
*YYYY_MM_DD_XXXXXX_create_posts_table.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
貼文的部份大致上除了涵蓋主題、內文之外,還有 user_id ( users 和 posts 之間為一對多的關係 ),除了建立主題與內文的欄位外,也可建立 user 的 foregin key 以便建立 users 和 posts 之間的關聯性 ( 視情況決定 )。
舉例:在某個電商網站中,若某個賣家有產品在線上,但若該賣家刪除了自己的帳號,那麼那些屬於本人的產品應該也要同時刪除才合理,否則可能會引來不必要的麻煩,因此 foreign key 有其存在的必要性。
*YYYY_MM_DD_XXXXXX_create_posts_table.php
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
// 建立 user_id 的欄位
$table->unsignedBigInteger('user_id');
// 建立主題與內文的欄位
$table->string('title');
$table->string('content');
// 建立 user_id 的 foreign key
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
設計完 post 的資料表後,接下來就將它遷移至自己的資料庫裡頭
$ php artisan migrate
除此之外,若曾經做過資料表遷移,但又要更動 migration 時,在編輯完 migration 的檔案後,可以執行以下指令:
1. 推回上一次的 migration
$ php artisan migrate:rollback
或者推回上幾次的 migration
$ php artisan migrate:rollback --step=5
甚至是推回所有的 migration
$ php artisan migrate:reset
2. 重新執行 migration
$ php artisan migrate
而1跟2的步驟可以用一個指令取代
// Rollback all your migrations and execute the migration command
$ php artisan migrate:refresh
或者
// Rollback limited migration and execute the migration command
$ php artisan migrate:refresh --step=[number]
< 補充 > migrate:fresh
為直接刪除所有資料表後再做遷移的動作。
確認資料表有確實寫入之後,下一篇就來設計貼文的model。
參考資料: