iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
2
Software Development

後端新手 使用laravel 從零開始 到開出api系列 第 11

Day11 使用laravel migration功能 讓你快速佈署資料庫! 下篇

  • 分享至 

  • xImage
  •  

Day11 使用laravel migration功能 讓你快速佈署資料庫! 下篇

上回我們大致上講了如何使用migration,這回我想簡單介紹我的簡易trello專案的table,順便講講怎麼用migration建立關聯式資料表吧!

關聯式資料表

下圖是我簡易trello專案中的資料表結構

  • 說明:

先講講我的需求吧

  1. 一個使用者擁有多張Card
  2. 每張Card裏面有多個task
  3. 每張Card裏面有多個使用者可以編輯它

依照上面3個需求,可以輕易的看出我資料表設計時,該有怎麼樣的關聯。

  1. user以及card為多對多
  2. task以及card為一對多

而圖中的groups是我多對多關連中獨立出來的table。多對多的關聯可以向這樣,新增一個新的table他分別跟users以及card為一對多的關係。
你可以理解為多對多就是兩個一對多的意思。

migration 設計關聯式

以下是groups這張表的migration

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class Group extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('groups', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('users_id');
            $table->foreign('users_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
            $table->unsignedBigInteger('card_id');
            $table->foreign('card_id')->references('id')->on('card')->onDelete('cascade')->onUpdate('cascade');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}

  • 說明:

想要建立一對多的關係,你必須有個外鍵(foreign key) 關聯到其他table。

簡單講就是一對多的的這張table新增一個column當作外鍵,也就是向這樣寫:

$table->unsignedBigInteger('users_id');

然後設定他為外鍵(foreign key)

$table->foreign('users_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');

上面的code是將users_id關聯到users這張table的id這個column。

  • onDelete('cascade')onUpdate('cascade')
    這兩個參數是為了在刪除或新增users內的資料,可以自動更改groups的資料。

    上面的例子,當你要刪除users內的資料,若是不加上onDelete('cascade')這個參數,會因為有groups關聯著,SQL會報錯誤,而無法刪除。


migration就講到這裡,其他比較進階的用法,可以參考官網。

參考:https://laravel.com/docs/7.x/migrations


上一篇
Day10 使用laravel migration功能 讓你快速佈署資料庫! 上篇
下一篇
Day12 laravel 使用 model 上篇
系列文
後端新手 使用laravel 從零開始 到開出api30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言