Laravel初學者指南:Model如何被Controller所使用

更新於 2023/08/20閱讀時間約 5 分鐘

前言

在我們的Laravel學習旅程中,我們已經探索了Model的基本概念和功能。在這篇文章中,我們將進一步深入了解如何在Controller中使用Model,以及這兩者之間的互動方式。


Model的基本定義

Model在Laravel中扮演著非常重要的角色,它代表了我們的資料結構,並負責與資料庫進行互動。透過Model,我們可以輕鬆地執行CRUD操作,而不需要撰寫冗長的SQL語句。

class Product extends Model
{
protected $table = 'products';
}


Controller的角色

Controller是MVC架構中的「指揮官」,它負責接收使用者的請求、處理業務邏輯、呼叫Model以取得或更新資料,最後返回適當的視圖給使用者。


Model關聯:hasMany、hasOne、belongsTo

Laravel的Eloquent ORM提供了多種關聯方法,讓我們可以輕鬆地定義Model之間的關係。例如,一個產品可能屬於一個分類,而一個分類可能有多個產品。這種關係可以使用`belongsTo`和`hasMany`方法來定義。

class Product extends Model
{
public function category(){
return $this->belongsTo(Category::class);
}
}

class Category extends Model
{
public function products()
{
return $this->hasMany(Product::class);
}
}


這些關聯方法的背後是基於外鍵的概念。在上述例子中,`products`表可能有一個名為`category_id`的外鍵,指向`categories`表的主鍵。

如何呼叫Model

在Laravel中,我們可以使用多種方法來呼叫Model。最常見的方法是使用Eloquent ORM的靜態方法。例如,要取得所有產品,我們可以使用`all`方法:

$products = Product::all();


實際應用:從Controller操作Model

Laravel的Eloquent ORM提供了非常直觀的方式來執行CRUD操作。以下是如何在Controller中使用Model進行CRUD操作的範例:


建立(Create)

當我們想要新增一個產品時,我們可以使用`create`方法:

public function store(Request $request)
{
$product = Product::create($request->all());
return redirect()->route('products.index');
}


讀取(Retrieve)

如前所述,要取得所有產品,我們可以使用`all`方法:

public function index()
{
$products = Product::all();
return view('products.index', ['products' => $products]);
}


如果我們只想取得某個特定的產品,我們可以使用`find`或`findOrFail`方法:

public function show($id)
{
$product = Product::findOrFail($id);
return view('products.show', ['product' => $product]);
}


更新(Update)

當我們想要更新產品的資訊時,我們可以使用`update`方法:

public function update(Request $request, $id)
{
$product = Product::findOrFail($id);
$product->update($request->all());
return redirect()->route('products.index');
}


刪除(Delete)

要刪除產品,我們可以使用`delete`方法:

public function destroy($id)
{
$product = Product::findOrFail($id);
$product->delete();
return redirect()->route('products.index');
}


結論

透過這篇文章,我們了解了如何在Controller中使用Model,以及這兩者之間的互動方式。在接下來的學習中,我們將繼續探索Laravel的其他功能,並學習如何建立更加強大和靈活的應用程式。

此外,這篇文章的程式碼不是非常嚴謹,只能夠當成教學範本,所以只將重點提點出來,讓這篇文章著重在如何使用model。

這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
本文開始前,對於已經熟悉Laravel框架的您來說,這篇文章可能涵蓋了一些您已知的基本概念。然而,對於那些剛踏入Laravel世界的初學者,這篇指南將為您提供一個基礎概念,幫助您更好地理解這個強大的框架。 簡介 Laravel是當今最受歡迎的PHP框架之一,它使用MVC(Model-View
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
本文開始前,對於已經熟悉Laravel框架的您來說,這篇文章可能涵蓋了一些您已知的基本概念。然而,對於那些剛踏入Laravel世界的初學者,這篇指南將為您提供一個基礎概念,幫助您更好地理解這個強大的框架。 簡介 Laravel是當今最受歡迎的PHP框架之一,它使用MVC(Model-View
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
在Model中常看到這兩個屬性fillable, guarded: protected $fillable=['name','job']; protected $guarded=['user_id']; 其中guarded是黑名單的意思,fillable則是白名單。 這兩個屬性是用來設定是否允許批量
Thumbnail
續上篇,把程式碼改成這樣,model加上關聯,就可以從article去query comments了。 L27表示從article table中primary key = 1的文章去找所有留言。 L27的$articles變數output如下: L12這個method: comments(),
Thumbnail
假如開發了一個部落格,以下是ERD設計: 接著從程式碼來看如何join: $this->article ->join('comments', 'article.article_id', '=', 'comments.article_id') ->select('article.article_i
Thumbnail
在開發過程中,難免會需要自己寫一些common function,例如Laravel 如何寫 Log這篇提到的,write log為了能夠顯示file name跟line,可以把它封裝成一個common function,以後要改log format也只需要從這邊改...
Thumbnail
Laravel的日誌系統底層是Monolog,設定在config\logging.php裡面,預設路徑是在storage\logs\laravel.log,也可以更改成喜歡的路徑。 ...
Thumbnail
Laravel本身是MVC架構的Framework,但隨著專案越來越龐大,若不把系統架構分工再切細一點,可能會導致日後維護的困難。 例如可能會很常發生controller要與model溝通拿資料,又要處理商業邏輯,就會導致controller越來越肥,因此本文要介紹的是....
Thumbnail
本筆記遵循官方文件教學,經過一些小修改,經測試可以跑在Laravel Framework version: 8.13.0,將筆記記錄下來。 ......
Thumbnail
本文模擬user註冊的情境來簡單演示,在Laravel中如何透過ajax來存取資料,以post request為例。 前端透過post把user資料送到controller中,並且透過model把資料塞進DB,最後回傳json response。 完整source cod
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
在Model中常看到這兩個屬性fillable, guarded: protected $fillable=['name','job']; protected $guarded=['user_id']; 其中guarded是黑名單的意思,fillable則是白名單。 這兩個屬性是用來設定是否允許批量
Thumbnail
續上篇,把程式碼改成這樣,model加上關聯,就可以從article去query comments了。 L27表示從article table中primary key = 1的文章去找所有留言。 L27的$articles變數output如下: L12這個method: comments(),
Thumbnail
假如開發了一個部落格,以下是ERD設計: 接著從程式碼來看如何join: $this->article ->join('comments', 'article.article_id', '=', 'comments.article_id') ->select('article.article_i
Thumbnail
在開發過程中,難免會需要自己寫一些common function,例如Laravel 如何寫 Log這篇提到的,write log為了能夠顯示file name跟line,可以把它封裝成一個common function,以後要改log format也只需要從這邊改...
Thumbnail
Laravel的日誌系統底層是Monolog,設定在config\logging.php裡面,預設路徑是在storage\logs\laravel.log,也可以更改成喜歡的路徑。 ...
Thumbnail
Laravel本身是MVC架構的Framework,但隨著專案越來越龐大,若不把系統架構分工再切細一點,可能會導致日後維護的困難。 例如可能會很常發生controller要與model溝通拿資料,又要處理商業邏輯,就會導致controller越來越肥,因此本文要介紹的是....
Thumbnail
本筆記遵循官方文件教學,經過一些小修改,經測試可以跑在Laravel Framework version: 8.13.0,將筆記記錄下來。 ......
Thumbnail
本文模擬user註冊的情境來簡單演示,在Laravel中如何透過ajax來存取資料,以post request為例。 前端透過post把user資料送到controller中,並且透過model把資料塞進DB,最後回傳json response。 完整source cod
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...