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

更新於 2024/12/15閱讀時間約 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
0會員
18內容數
有軟體開發相關文章。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿棋的沙龍 的其他內容
在 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(模型-視圖-控制器)架構是一個常見的設計模式,能有效地幫助我們組織程式碼,將應用的資料邏輯、業務邏輯和視圖展示分開。本文將介紹如何使用 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
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
MVVM(Model View ViewModel),特點是View跟ViewModel之間做資料綁定。 Model 負責儲存應用程式的資料。 View 負責顯示資料。 ViewModel 負責處理View和Model之間的狀態關係。
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
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
MVVM(Model View ViewModel),特點是View跟ViewModel之間做資料綁定。 Model 負責儲存應用程式的資料。 View 負責顯示資料。 ViewModel 負責處理View和Model之間的狀態關係。
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更