哈囉大家好!
昨天處理完了新增resume功能,今天要讀取存在MySQL資料庫的資料,並顯示在頁面上。
首先目前登入後dashboard的畫面如下:
左邊是簡單的個人panel,會顯示該使用者在github的大頭照與名稱(我是cookie-killer😎),透過最下方的按鈕可以切換到昨天創建的編輯表單頁面。右邊則是會顯示所有使用者創建過的resume清單,每個清單都會是一個按鈕,透過按鈕可以切換到單筆resume的預覽頁面,預計會讓使用者可以在此頁面進行編輯。
若是使用者登入後沒有創建任何resume,畫面則會顯示「無任何創建紀錄」的文字訊息。
大致說明完功能後,接下來簡單介紹新撰寫的程式碼吧!
在撰寫撈資料的部分時,才突然想到昨天創建resume時忘記留一個欄位來判斷是哪位使用者上傳的資料,於是要再勵用migration調整資料表:
public function up(): void
{
Schema::table('resume', function (Blueprint $table) {
$table->string('github_email')->nullable();
});
}
協助我和資料庫互動的Model也要調整欄位設定:
class Resume extends Model
{
use HasFactory;
protected $table = 'resume';
protected $fillable = [
'name',
'email',
'phone',
'social',
'education',
'skills',
'language',
'selfIntro',
'github_email' // 新增github_email
];
}
調整完資料表後,也要調整送出resume表單的部分:(這裡只有顯示修改部分的程式碼,不然太大坨了XD)
$github_email = Auth::user()->getEmail; // 使用者的github email
Resume::create([
'name' => $this->name,
'email' => $this->email,
'phone' => $this->phone,
'social' => $this->social,
'education' => $this->education,
'skills' => $this->skills,
'language' => $this->language,
'selfIntro' => $this->selfIntro,
'github_email' => $github_email // 新增github email
]);
這樣一來在撈資料時就可以判斷哪些資料是對應使用者提交的。
因為resume清單要顯示在dashboard頁面,所以要把撈數據的邏輯寫在dashboard component的render() function裡面:
public function render()
{
$githubUser = Auth::user();
$github_email = $githubUser->getEmail; // 取得使用者github email
$resumes = Resume::where('github_email', $github_email)->get();
return view('livewire.dashboard', ['githubUser' => $githubUser,
'resumes' => $resumes]);
}
這裡用where() function來撈取符合條件的資料!
即純SQL語法:SELECT * FROM resume WHERE github_email
= $github_email
撈取的資料會是陣列型別,將撈取的結果存到$resumes這個變數,就可以在blade template裡使用for loop跑resume list:
<div class="card-body" >
<div class="d-grid gap-3" style="overflow: scroll;">
@if (count($resumes) > 0) // 判斷是否有創建紀錄
@foreach ($resumes as $resume)
<a class="btn btn-dark" type="button"
href="/resume/{{ $resume->id }}">
resume {{ $resume->id }} - {{ $resume->created_at}}
</a>
@endforeach
@else
<h4>There's no any resume created!</h4>
@endif
</div>
</div>
這裡跑回圈之前有先判斷是否至少有一筆創建紀錄,沒有的話就會像開頭畫面顯示「無創建紀錄」文字~
有的話每一筆都會是一個按鈕,按鈕目前暫定會切換到/resume/{{ id }}"這個路徑。
那麼讀取所有創建的resume的過程就簡單到這邊結束了~
明天要來處理單筆紀錄的顯示,要來找一些模板參考一下排版XD
那就明天見啦 祝大家有個美好星期六