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