Laravel (資料操作並連接其他資料表)

更新 發佈閱讀 14 分鐘

在這篇文章中,我們將介紹如何使用 Laravel 的 MVC(模型-視圖-控制器)架構來處理資料的創建、更新、刪除操作,並展示如何使用外鍵連接其他資料表。我們將從前端發送請求到後端,並演示如何在 Controller 中處理這些請求來操作資料。



1. 在 Laravel 中處理資料創建操作

在 Laravel 中,我們通常使用 Controller 來處理資料的 CRUD 操作(創建、讀取、更新、刪除)。以下是我們如何處理資料創建操作的範例。

BooksController:創建新書籍資料

<?php

namespace App\Http\Controllers;

use App\Models\Book;
use Illuminate\Http\Request;

class BooksController extends Controller
{
// 新增資料
public function create(Request $request)
{
// 使用 Laravel 的 Eloquent ORM 來創建新資料
Book::create([
'publisher_id' => $request->publisher_id,
'title' => $request->title,
'author' => $request->author,
'date' => $request->date,
'price' => $request->price,
]);

return ['message' => 'ok']; // 回傳成功訊息
}
}

在上面的 BooksController 中,我們定義了一個 create 方法,這個方法接收來自前端的請求資料,並將其存入資料庫。

路由設置

routes/web.php 中,我們需要設置對應的路由來處理資料創建的請求:

use App\Http\Controllers\BooksController;

Route::post('/create-book', [BooksController::class, 'create']);


2. 如何使用 Laravel 的 Eloquent 關聯

Laravel 的 Eloquent ORM 使得處理資料關聯變得非常簡單。在本範例中,將學習如何在 Book 模型中使用 belongsTo 關聯來連接出版社資料。

更新 Books 模型:定義與 Publisher 的關聯

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
use HasFactory;

protected $table = 'books';
protected $fillable = [
'title',
'author',
'date',
'price',
'publisher_id',
];

// 建立與 Publisher 之間的關聯
public function publisher()
{
// 一對多關聯,使用 belongsTo() 方法
return $this->belongsTo(Publisher::class);
}
}

更新 Publisher 模型:定義與 Book 的關聯

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Publisher extends Model
{
use HasFactory;

protected $table = 'publishers';
protected $fillable = [
'name',
'phone',
'email',
'address',
'manager_id',
'person',
];

// 建立與 Book 之間的關聯
public function books()
{
// 一對多關聯,使用 hasMany() 方法
return $this->hasMany(Book::class);
}
}

這樣,我們就能夠在 Book 模型中輕鬆地通過 publisher 來獲取相關的出版社資料,反之,透過 books 來獲取某出版社下的所有書籍資料。


3. 使用外鍵連接資料表

有時,我們需要在資料表中加入外鍵來建立兩個資料表之間的關聯。下面是如何在 books 資料表中添加外鍵 publisher_id 的方法。

創建資料表遷移:增加外鍵欄位

首先,我們需要為 books 資料表創建一個遷移文件,並新增 publisher_id 欄位:

php artisan make:migration add_publisher_id_to_books_table --table=books

在遷移文件中,我們會為 books 資料表新增 publisher_id 欄位,並將其設置為外鍵。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('books', function (Blueprint $table) {
$table->unsignedBigInteger('publisher_id')->default(0)->comment('出版社id');
// 定義外鍵,引用 publishers 表的 id 欄位
$table->foreign('publisher_id')->references('id')->on('publishers');
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('books', function (Blueprint $table) {
$table->dropForeign(['publisher_id']);
$table->dropColumn('publisher_id');
});
}
};

執行這個遷移來更新資料表結構:

php artisan migrate


4. 前端使用 Vue + TypeScript 發送資料請求

接下來,我們將展示如何使用前端技術,如 Vue 3 和 TypeScript,來發送 POST 請求創建資料。

bookView.blade.php 中發送 POST 請求

我們將在 bookView.blade.php 中使用原生 JavaScript 實現資料創建。當用戶點擊按鈕時,將觸發一個 POST 請求,將資料傳送到 Laravel 的後端。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>新增書籍</title>
</head>
<body>
<button id="create-btn">新增書籍</button>

<script>
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');

// 當點擊新增書籍按鈕時,發送 POST 請求
document.getElementById('create-btn').addEventListener('click', function() {
fetch('/create-book', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken, // 防止 CSRF 攻擊
},
body: JSON.stringify({
publisher_id: 1, // 假設已選擇的出版社 ID
title: '書本名稱',
author: '作者',
date: '2024-03-03',
price: 550,
})
})
.then(res => res.json())
.then(json => {
if (json.message === 'ok') {
alert('新增成功');
} else {
alert('新增失敗');
}
})
.catch(err => {
console.error('發生錯誤:', err);
});
});
</script>
</body>
</html>

註解說明:

  • CSRF Token:為了保護應用免受跨站請求偽造(CSRF)攻擊,我們必須將 CSRF token 隨請求一同發送。Laravel 提供了一個 meta 標籤來方便取得這個 token。
  • 發送 JSON 請求:我們使用 fetch API 來發送 POST 請求,並將資料轉換成 JSON 格式。


5. 結論

通過這篇文章,學習了如何在 Laravel 中使用 MVC 架構進行資料操作,並使用外鍵建立資料表之間的關聯。也展示了如何使用前端技術,如 Vue + TypeScript,來向後端發送資料創建請求。這樣的架構可以幫助開發者更清晰地組織程式碼,提高維護性和擴展性。


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

 

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

 

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

留言
avatar-img
留言分享你的想法!
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
週末午後,是我難得可以覓得的安靜時光,兩個孩子的午睡時段,換得一個能令人安心的專屬空間,一切吵雜拋於腦後,珍惜這個專注眼前的獨處時間。 準備好“繪製”的小物件”—選了一顆小番茄,回到書桌前,打開色鉛筆盒、攤好畫紙,展開午後畫畫的小旅程(也為自己的獨享時光沖一杯熱美式咖啡)
Thumbnail
週末午後,是我難得可以覓得的安靜時光,兩個孩子的午睡時段,換得一個能令人安心的專屬空間,一切吵雜拋於腦後,珍惜這個專注眼前的獨處時間。 準備好“繪製”的小物件”—選了一顆小番茄,回到書桌前,打開色鉛筆盒、攤好畫紙,展開午後畫畫的小旅程(也為自己的獨享時光沖一杯熱美式咖啡)
Thumbnail
嗨!大家好,我是順勢流・SHUNFOX,算是喜歡打扮成自己獨特的樣子、偶爾重保養, 也喜歡購買一些實用好物的人! 蝦皮雙12狂歡生日慶購物節就快到了,想趁這個機會回購好物一番, 順便跟大家分享我買過、想買哪些物品~不藏私,好東西值得跟大家共享❤️ 🌊順の雙12必買清單公開! 🌹
Thumbnail
嗨!大家好,我是順勢流・SHUNFOX,算是喜歡打扮成自己獨特的樣子、偶爾重保養, 也喜歡購買一些實用好物的人! 蝦皮雙12狂歡生日慶購物節就快到了,想趁這個機會回購好物一番, 順便跟大家分享我買過、想買哪些物品~不藏私,好東西值得跟大家共享❤️ 🌊順の雙12必買清單公開! 🌹
Thumbnail
在 Laravel 開發 API 時,直接在 Controller 內進行資料加工可能會讓程式碼變得雜亂且難以維護。因此,Laravel 提供 Resource (資源轉換器) 來解決這個問題,讓我們可以統一管理 API 的輸出格式,將模型model或模型集合collection轉換為適合 API
Thumbnail
在 Laravel 開發 API 時,直接在 Controller 內進行資料加工可能會讓程式碼變得雜亂且難以維護。因此,Laravel 提供 Resource (資源轉換器) 來解決這個問題,讓我們可以統一管理 API 的輸出格式,將模型model或模型集合collection轉換為適合 API
Thumbnail
※ 建立一個管理者的資料夾,負責建立不同的管理 — manager: ※ 在manager資料夾中,建立modelManager.ts: ※ 設定資料庫模型的管理: 匯入模組: import { IProductModel, ProductModel } from "@/model/prod
Thumbnail
※ 建立一個管理者的資料夾,負責建立不同的管理 — manager: ※ 在manager資料夾中,建立modelManager.ts: ※ 設定資料庫模型的管理: 匯入模組: import { IProductModel, ProductModel } from "@/model/prod
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
今天要來分享關於 Laravel Request 概念,Request 代表了來自客戶端(瀏覽器)的HTTP請求。這個類型的物件允許您輕鬆地訪問HTTP請求中的各種數據,例如表單數據、路由參數、Cookie、HTTP標頭等。 現在我們來定義及應用吧!
Thumbnail
今天要來分享關於 Laravel Request 概念,Request 代表了來自客戶端(瀏覽器)的HTTP請求。這個類型的物件允許您輕鬆地訪問HTTP請求中的各種數據,例如表單數據、路由參數、Cookie、HTTP標頭等。 現在我們來定義及應用吧!
Thumbnail
在Laravel的MVC架構中,視圖(View)是呈現資料給使用者的關鍵部分。本篇深入探討了視圖的基本概念、建立與管理、與資料的互動方式,以及Blade模板引擎的應用。Blade提供了一套強大的工具,使動態視圖建立更為高效。
Thumbnail
在Laravel的MVC架構中,視圖(View)是呈現資料給使用者的關鍵部分。本篇深入探討了視圖的基本概念、建立與管理、與資料的互動方式,以及Blade模板引擎的應用。Blade提供了一套強大的工具,使動態視圖建立更為高效。
Thumbnail
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Thumbnail
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
Thumbnail
假如開發了一個部落格,以下是ERD設計: 接著從程式碼來看如何join: $this->article ->join('comments', 'article.article_id', '=', 'comments.article_id') ->select('article.article_i
Thumbnail
假如開發了一個部落格,以下是ERD設計: 接著從程式碼來看如何join: $this->article ->join('comments', 'article.article_id', '=', 'comments.article_id') ->select('article.article_i
Thumbnail
Laravel本身是MVC架構的Framework,但隨著專案越來越龐大,若不把系統架構分工再切細一點,可能會導致日後維護的困難。 例如可能會很常發生controller要與model溝通拿資料,又要處理商業邏輯,就會導致controller越來越肥,因此本文要介紹的是....
Thumbnail
Laravel本身是MVC架構的Framework,但隨著專案越來越龐大,若不把系統架構分工再切細一點,可能會導致日後維護的困難。 例如可能會很常發生controller要與model溝通拿資料,又要處理商業邏輯,就會導致controller越來越肥,因此本文要介紹的是....
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News