2023-08-20|閱讀時間 ‧ 約 6 分鐘

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

前言

在我們的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。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.