iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
Modern Web

Laravel實作 —系列 第 19

[Day 19] Laravel實作 -- 我與LL冥婚的小孩叫中間表

  • 分享至 

  • xImage
  •  

在article暫時告一個段落之後,我們要進入新的篇章,接著要進入joiner,紀錄活動的參與者,在正式進入實作前,今日和明天的安排是介紹資料關聯中的多對多關係,讓我們接著看下去。

https://ithelp.ithome.com.tw/upload/images/20231004/201631424l0K6JFrbx.png

這是我們對參與者的表格和關聯,joiner作為中間表,主鍵是由兩個外來鍵(article_id和user_id)所組成,其餘是我們需要每報名活動所需要填寫的資料,對資料有想法後,接著來看多對多關係。

先讓我們認識多對多關係,為什麼會需要多對多關係呢?舉例role和user,一個user可以有很多role,反之一個role也會有許多user,這時面對不管是將role存在user的table,還是把user存在role裡,第一個會遇到的問題,屬性的不可切割性,我們不能把多個值放進同一格屬性中,role的user一格屬性不能同時存有使用者1和使用者2。

但我們如果把user分成多個屬性,第二個問題是到底要創建多少個屬性才夠user用,和role有的user數量大小差太多,中間的差就會造成資料表中許多null,這個狀況並不理想,所以多對多的表誕生了,把兩個表的key提出,重新組成新的中間表,就是鐵人賽19和20天的目標,接著來看看今天的實作吧。

首先我們先建立joiner所需的controllerphp artisan make:model Joiner -mrc

建立好後,進入database\migrations\創建日期create_joiners_table.php填上我們需要的屬性,

Schema::create('joiners', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
            $table->foreignId('article_id')->constrained()->cascadeOnDelete();
            $table->string('note')->nullable();
            $table->string('phone');
            $table->date('birthday');
            $table->string('ID_number');
            $table->timestamps();
        });

複習一下,兩個外來鍵後面跟隨的是負責檢查對應的鍵是否存在,還有note作為活動個人資料中的備註,加上nullable表示可以為空,不一定要填。

在一切都準備好後,就使用魔法的咒語,php arisan migrate把我們的table放進資料庫吧。

今天的鐵人賽介紹了多對多的關係表和建置joiner的migration,明天會接續今天的內容,繼續實作多對多的joiner表格,讓我們繼續看下去,掰掰。


上一篇
[Day 18] Laravel實作 -- 地獄風景是夢境還是真實
下一篇
[Day 20] Laravel實作 -- 比米諾斯人生還亂的是多對多
系列文
Laravel實作 —30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言