Red Business Card Design Minimal Logo Of Typographical Logo Holding An Elongated Flame Moving Tr 35871672

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

前言

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

Model的基本定義

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

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

Controller的角色

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

Model關聯:hasMany、hasOne、belongsTo

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

PHP
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方法:

PHP
$products = Product::all();

實際應用:從Controller操作Model

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

建立(Create)

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

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

讀取(Retrieve)

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

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

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

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

更新(Update)

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

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

刪除(Delete)

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

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

結論

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

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