Laravel (從Seeder到視圖展示)

更新於 發佈於 閱讀時間約 10 分鐘

在本篇文章中,我們將深入探討如何在 Laravel 中建立關聯資料、使用 Eloquent ORM 操作資料庫,並將資料傳遞到前端視圖。這篇文章將涵蓋從資料庫遷移、Seeder、關聯模型的建立,到資料傳遞的完整流程,並介紹如何在前端展示資料。無論你是 Laravel 新手還是有經驗的開發者,都能從這篇文章中獲得有價值的學習資源。



1. 處理 Eloquent 關聯:belongsTohasMany

在 Laravel 中,我們使用 Eloquent ORM 來處理資料間的關聯。常見的關聯包括 belongsTohasMany,分別代表一對多的反向關聯和多對一的關聯。

1.1. belongsTohasMany 關聯

當我們希望從子模型查詢父模型時,我們會使用 belongsTo,而當我們希望從父模型查詢多個子模型時,我們會使用 hasMany。以下是這兩種關聯的範例:

Movie 和 MovieType 之間的 belongsTohasMany 關聯

// Movie 模型:定義與 MovieType 的 belongsTo 關聯
class Movie extends Model
{
public function movieType()
{
return $this->belongsTo(MovieType::class);
}
}

// MovieType 模型:定義與 Movie 的 hasMany 關聯
class MovieType extends Model
{
public function movies()
{
return $this->hasMany(Movie::class);
}
}

1.2. 使用 with 方法載入關聯

我們可以使用 Eloquent 的 with 方法來同時載入關聯資料,這樣可以避免 N+1 查詢問題。以下範例展示如何使用 with 方法載入電影類型(movie_types)資料:

$movies = Movie::with('movieType')->get();
foreach ($movies as $movie) {
echo $movie->name . ' - ' . $movie->movieType->name . "<br>";
}

這樣會一次性查詢所有的電影資料並同時查詢它們對應的電影類型資料。


2. 使用 nullable() 設定資料表的預設值

有時候,我們希望資料表的某些欄位允許空值。Laravel 提供了 nullable() 方法來設置欄位允許空值。

2.1. 在遷移中設置 nullable

假設我們有一個 movies 資料表,其中有 release_date 欄位。如果我們希望此欄位可以為空,我們可以在遷移中使用 nullable() 設置該欄位:

// 遷移文件:設置 release_date 欄位為 nullable
Schema::table('movies', function (Blueprint $table) {
$table->date('release_date')->nullable()->default(null);
});

這樣,release_date 欄位將允許空值。


3. 傳遞資料到前端

在 Laravel 中,控制器負責將資料傳遞到視圖。下面我們展示如何將資料從控制器傳遞到前端並在視圖中顯示它。

3.1. 在控制器中傳遞資料

在控制器中,我們可以使用 compact 函數將資料傳遞給視圖:

$movies = Movie::with('movieType')->get();
$data = $movies->map(function($movie) {
return [
'id' => $movie->id,
'name' => $movie->name,
'typeName' => $movie->movieType->name ?? '',
];
});

return view('movieView', compact('data'));

3.2. 在 Blade 視圖中顯示資料

在 Blade 視圖中,我們可以使用 @foreach 迴圈來顯示資料:

<div id="container">
@foreach ($data as $movie)
<p>{{ $movie['name'] }} - {{ $movie['typeName'] }}</p>
@endforeach
</div>

這段程式碼會遍歷 $data 並顯示每部電影的名稱和電影類型。


4. 建立並執行 Seeder

Laravel 提供了 Seeder 來填充測試資料到資料庫。下面我們將展示如何創建一個 MovieTypeSeeder 來填充電影類型資料。

4.1. 創建 Seeder

使用 Artisan 命令來創建 Seeder:

php artisan make:seeder MovieTypeSeeder

接著,在 MovieTypeSeeder 中添加我們的資料:

<?php

namespace Database\Seeders;

use App\Models\MovieType;
use Illuminate\Database\Seeder;

class MovieTypeSeeder extends Seeder
{
public function run()
{
$data = [
['name' => '動作', 'color' => '紅'],
['name' => '冒險', 'color' => '綠'],
['name' => '奇幻', 'color' => '藍'],
['name' => '搞笑', 'color' => '橘'],
['name' => '科幻', 'color' => '紫'],
];

foreach ($data as $value) {
MovieType::create($value);
}
}
}

4.2. 執行 Seeder

接下來,執行 Seeder 填充資料:

php artisan db:seed --class=MovieTypeSeeder

4.3. 執行全部 Seeder

如果我們希望執行所有 Seeder,可以在 DatabaseSeeder 中調用其他 Seeder:

public function run()
{
$this->call([
MovieTypeSeeder::class,
// 可以在這裡調用其他 Seeder
]);
}

接著,執行所有 Seeder:

php artisan db:seed


5. 資料庫操作的最佳實踐

5.1. 清空資料庫並重新執行 Seeder

在開發過程中,我們可能需要清空資料庫並重新執行 Seeder。可以使用以下命令來刪除資料庫中的所有資料並重新執行遷移和 Seeder:

php artisan migrate:fresh --seed

這會清空所有資料表,重新執行所有的遷移並執行 Seeder 填充資料。

5.2. 密碼雜湊

Laravel 使用 bcrypt 函數來將密碼進行雜湊處理,保證資料的安全性。在使用 create()update() 方法時,應該確保密碼欄位被正確雜湊。


6. 結論

這篇文章展示了如何在 Laravel 中建立和操作關聯資料,並將資料從後端傳遞到前端。學習了如何使用 Eloquent ORM 來處理關聯資料、使用 nullable() 設置資料欄位的預設值、以及如何創建和執行 Seeder 填充資料庫。在實際開發中,這些技術可以幫助你更有效地管理資料庫,並讓你能夠快速展示資料。

透過這些技巧,你將能夠更輕鬆地管理大型應用的資料結構,提升開發效率,並確保資料處理的安全性和可靠性。接下來會介紹合併Vue和Laravel。


對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!

 

大家可以考慮多多分享文章和考慮訂閱沙龍方案或贊助等喔!不過請注意不要違反著作權等行為。當然決定權都在於您,不會干涉您的任何決定。

 

提醒,文章僅供正當的知識參考,文章不負任何責任。


留言
avatar-img
留言分享你的想法!
旅人小萌-avatar-img
2024/12/16
謝謝您的分享❤️
avatar-img
阿棋的沙龍
2會員
34內容數
有軟體開發相關文章。
阿棋的沙龍的其他內容
2025/02/19
在現代的Web應用中,發送即時郵件通知是一項常見的需求。無論是訂單狀態更新、賬單付款通知,還是帳號活動警報,這些通知都能讓用戶即時了解重要信息,並提升使用者體驗。今天,將介紹如何在Laravel中實現一個簡單的郵件通知系統,並演示如何使用通知來通知使用者。
2025/02/19
在現代的Web應用中,發送即時郵件通知是一項常見的需求。無論是訂單狀態更新、賬單付款通知,還是帳號活動警報,這些通知都能讓用戶即時了解重要信息,並提升使用者體驗。今天,將介紹如何在Laravel中實現一個簡單的郵件通知系統,並演示如何使用通知來通知使用者。
2025/02/12
網站的安全性對於保護用戶資料和防止惡意攻擊至關重要。對於許多應用來說,實現Email驗證和兩步驟驗證(2FA)是增強用戶安全的一種有效方式。今天將探索如何在Laravel框架中實現這兩項功能,並結合Google Gmail的應用程式密碼,從而保障你網站的用戶帳號安全。
2025/02/12
網站的安全性對於保護用戶資料和防止惡意攻擊至關重要。對於許多應用來說,實現Email驗證和兩步驟驗證(2FA)是增強用戶安全的一種有效方式。今天將探索如何在Laravel框架中實現這兩項功能,並結合Google Gmail的應用程式密碼,從而保障你網站的用戶帳號安全。
2025/02/05
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
2025/02/05
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
這篇文章深入探討 PHP 中的 Array 與 Laravel 框架中的 Collection 之間的主要差異,並分析各自的優缺點。文章介紹了兩者在本質、方法連鎖、高階方法及 Eloquent 互動的區別,並提供實際的使用案例,幫助初學者更好地理解這兩種資料結構的特性。
Thumbnail
這篇文章深入探討 PHP 中的 Array 與 Laravel 框架中的 Collection 之間的主要差異,並分析各自的優缺點。文章介紹了兩者在本質、方法連鎖、高階方法及 Eloquent 互動的區別,並提供實際的使用案例,幫助初學者更好地理解這兩種資料結構的特性。
Thumbnail
在資料驅動的時代,實體-關係圖(ER圖)作為資料建模的核心工具,對於理解、設計和最佳化資料庫結構至關重要。本文將透過精幹易懂的教程,結合ER圖範例,帶你領略ProcessOn在ER圖繪製上的獨特魅力。
Thumbnail
在資料驅動的時代,實體-關係圖(ER圖)作為資料建模的核心工具,對於理解、設計和最佳化資料庫結構至關重要。本文將透過精幹易懂的教程,結合ER圖範例,帶你領略ProcessOn在ER圖繪製上的獨特魅力。
Thumbnail
本文介紹如何在 Laravel 中建立與操作資料庫模型,以及如何有效解決 N + 1 問題等。透過使用 Laravel 的 Eloquent ORM,開發者可以簡化資料庫操作,提高程式的可維護性與性能,是學習 Laravel 的開發者不可錯過的參考資料。
Thumbnail
本文介紹如何在 Laravel 中建立與操作資料庫模型,以及如何有效解決 N + 1 問題等。透過使用 Laravel 的 Eloquent ORM,開發者可以簡化資料庫操作,提高程式的可維護性與性能,是學習 Laravel 的開發者不可錯過的參考資料。
Thumbnail
本篇文章介紹了Laravel這個開源PHP框架,重點解析其MVC架構及相關功能,包括中介層、服務層、數據傳輸對象(DTO)與值對象(VO)。Laravel的穩定性與擴展性使其成為臺灣許多企業的首選框架,並提供升級與編碼風格的資源參考,適合所有PHP開發者瞭解和掌握。
Thumbnail
本篇文章介紹了Laravel這個開源PHP框架,重點解析其MVC架構及相關功能,包括中介層、服務層、數據傳輸對象(DTO)與值對象(VO)。Laravel的穩定性與擴展性使其成為臺灣許多企業的首選框架,並提供升級與編碼風格的資源參考,適合所有PHP開發者瞭解和掌握。
Thumbnail
本文探討資料庫設計的基本概念,區別了 Flat-file 和 Database,並詳細介紹了資料庫設計的流程,包括需求分析、ER 圖概念設計、邏輯資料模型和物理模型的轉換。還介紹了關聯式資料庫的基本組成、五大鍵以及各種限制,希望對自學者理解資料庫設計有所幫助。
Thumbnail
本文探討資料庫設計的基本概念,區別了 Flat-file 和 Database,並詳細介紹了資料庫設計的流程,包括需求分析、ER 圖概念設計、邏輯資料模型和物理模型的轉換。還介紹了關聯式資料庫的基本組成、五大鍵以及各種限制,希望對自學者理解資料庫設計有所幫助。
Thumbnail
本文介紹 Laravel 中的路由設定,討論手動定義路由、群組、前綴和中介層的使用。透過這些技巧,能夠靈活組織 API 結構,提升可讀性和安全性。此外,還探討子資源路由及命名空間等進階技巧,幫助開發者精細控制路由行為。接下來會探討控制器的實作。
Thumbnail
本文介紹 Laravel 中的路由設定,討論手動定義路由、群組、前綴和中介層的使用。透過這些技巧,能夠靈活組織 API 結構,提升可讀性和安全性。此外,還探討子資源路由及命名空間等進階技巧,幫助開發者精細控制路由行為。接下來會探討控制器的實作。
Thumbnail
本文介紹 Laravel 中的 Model,透過 Eloquent ORM 進行資料庫互動。內容涵蓋 Model 建立、資料表關聯設定,以及利用 Eloquent 特性來優化程式碼。目的是簡化資料庫操作,提高程式碼可讀性與維護性。接下來將開發後端 API,進一步實現系統功能。
Thumbnail
本文介紹 Laravel 中的 Model,透過 Eloquent ORM 進行資料庫互動。內容涵蓋 Model 建立、資料表關聯設定,以及利用 Eloquent 特性來優化程式碼。目的是簡化資料庫操作,提高程式碼可讀性與維護性。接下來將開發後端 API,進一步實現系統功能。
Thumbnail
這篇文章介紹在 Laravel 中使用 Migration 管理資料庫結構,實現財務管理系統的資料表建立。Migration 提供版本控制、自動化管理和可移植性,方便開發者同步資料庫變更。還介紹了填充測試資料(Seeder)的操作,提高團隊協作效率。
Thumbnail
這篇文章介紹在 Laravel 中使用 Migration 管理資料庫結構,實現財務管理系統的資料表建立。Migration 提供版本控制、自動化管理和可移植性,方便開發者同步資料庫變更。還介紹了填充測試資料(Seeder)的操作,提高團隊協作效率。
Thumbnail
延續上篇: 功能實作篇 框架與結構 接下來我們將深入實作 Laravel 框架中的路由(Router)、控制器(Controller)、業務邏輯(Service)、儲存庫模式(Repository Pattern),以及模型(Model)的細節。這些部分將構成我們縮網址系統的核心功能。
Thumbnail
延續上篇: 功能實作篇 框架與結構 接下來我們將深入實作 Laravel 框架中的路由(Router)、控制器(Controller)、業務邏輯(Service)、儲存庫模式(Repository Pattern),以及模型(Model)的細節。這些部分將構成我們縮網址系統的核心功能。
Thumbnail
續上篇,把程式碼改成這樣,model加上關聯,就可以從article去query comments了。 L27表示從article table中primary key = 1的文章去找所有留言。 L27的$articles變數output如下: L12這個method: comments(),
Thumbnail
續上篇,把程式碼改成這樣,model加上關聯,就可以從article去query comments了。 L27表示從article table中primary key = 1的文章去找所有留言。 L27的$articles變數output如下: L12這個method: comments(),
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News