Laravel (從Seeder到視圖展示)

更新於 2024/12/16閱讀時間約 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
0會員
18內容數
有軟體開發相關文章。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿棋的沙龍 的其他內容
在這篇文章中,我們將介紹如何使用 Laravel 的 MVC(模型-視圖-控制器)架構來處理資料的創建、更新、刪除操作,並展示如何使用外鍵連接其他資料表。我們將從前端發送請求到後端,並演示如何在 Controller 中處理這些請求來操作資料。
在 Laravel 框架中,MVC(模型-視圖-控制器)架構是一個常見的設計模式,能有效地幫助我們組織程式碼,將應用的資料邏輯、業務邏輯和視圖展示分開。本文將介紹如何使用 Laravel 的 MVC 架構來創建、讀取、更新和刪除資料(即 CRUD 操作),並將資料顯示到前端頁面上。
在 Laravel 中,操作資料庫的核心是透過 Model 來進行的。Model 不僅負責與資料表進行溝通,它還提供了一個簡單而直觀的方式來進行資料庫的增、刪、改、查等操作。今天,將學習如何建立 Model,創建資料表,並且如何在路由中進行資料操作。
在進行 Laravel 開發時,資料庫管理是開發過程中的重要環節,而 Laravel 的遷移(Migrations)提供了一個簡單而強大的方法來創建、修改和管理資料庫結構。本文將引導如何使用 Laravel 的資料庫遷移功能,並透過範例教學,幫助你掌握如何創建資料表、修改欄位、處理資料表關聯等操作。
今天,我們將簡單介紹 Git 和 GitHub,並深入了解如何使用 Git 解決衝突。此外,還會介紹常見的 API 方法 和 Laravel 中的類語法,讓你更好地理解程式碼的運作方式。
在這篇文章中,來學習如何安裝 XAMPP、Composer 和 Laravel,並深入探討如何在 Laravel 專案中使用 PHP 進行開發。這篇將會包括一些基本的 PHP 語法、常見的操作(如迴圈、條件式、陣列處理等)以及如何在 Laravel 中進行一些常見的任務。
在這篇文章中,我們將介紹如何使用 Laravel 的 MVC(模型-視圖-控制器)架構來處理資料的創建、更新、刪除操作,並展示如何使用外鍵連接其他資料表。我們將從前端發送請求到後端,並演示如何在 Controller 中處理這些請求來操作資料。
在 Laravel 框架中,MVC(模型-視圖-控制器)架構是一個常見的設計模式,能有效地幫助我們組織程式碼,將應用的資料邏輯、業務邏輯和視圖展示分開。本文將介紹如何使用 Laravel 的 MVC 架構來創建、讀取、更新和刪除資料(即 CRUD 操作),並將資料顯示到前端頁面上。
在 Laravel 中,操作資料庫的核心是透過 Model 來進行的。Model 不僅負責與資料表進行溝通,它還提供了一個簡單而直觀的方式來進行資料庫的增、刪、改、查等操作。今天,將學習如何建立 Model,創建資料表,並且如何在路由中進行資料操作。
在進行 Laravel 開發時,資料庫管理是開發過程中的重要環節,而 Laravel 的遷移(Migrations)提供了一個簡單而強大的方法來創建、修改和管理資料庫結構。本文將引導如何使用 Laravel 的資料庫遷移功能,並透過範例教學,幫助你掌握如何創建資料表、修改欄位、處理資料表關聯等操作。
今天,我們將簡單介紹 Git 和 GitHub,並深入了解如何使用 Git 解決衝突。此外,還會介紹常見的 API 方法 和 Laravel 中的類語法,讓你更好地理解程式碼的運作方式。
在這篇文章中,來學習如何安裝 XAMPP、Composer 和 Laravel,並深入探討如何在 Laravel 專案中使用 PHP 進行開發。這篇將會包括一些基本的 PHP 語法、常見的操作(如迴圈、條件式、陣列處理等)以及如何在 Laravel 中進行一些常見的任務。
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更