iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
自我挑戰組

後端新手PHP+Laravel筆記系列 第 28

[Day28]Laravel Eloquent ORM

首先,讓我們創建一個 Eloquent 模型。模型通常位於app目錄中,但您可以將它們隨意放置在可以根據您的文件自動加載的任何位置。所有 Eloquent 模型都擴展了類。
composer.json
Illuminate\Database\Eloquent\Model

創建模型實例的最簡單方法是使用Artisan 命令:make:model
讓我們來創建一個Product model
php artisan make:model Product

創建好之後打開

我們沒有告訴 Eloquent 為我們的Product模型使用哪個表。按照慣例,除非明確指定另一個名稱,否則將使用類的複數名稱“snake case”作為表名。因此,在這種情況下,Eloquent 將假設Product模型將記錄存儲在products表中。您可以通過table在模型上定義屬性來指定自定義表:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'my_products';
}

如下範例model有這些屬性可以使用

<?php

namespace App\Models;

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

class Product extends Model
{
    use HasFactory;

    protected $guarded = []; // 設定成只有product_id欄位不能被更改

    protected $fillable = ['code', 'name', 'price', 'quantity'];  // 只有這些欄位可以被大量新增

    protected $hidden = ['updated_at'];  // 隱藏欄位

    protected $appends = ["current_price"];  // 自製屬性

    public function getCurrentPriceAttribute()  // 固定命名規則get...Attribute對應上面自製屬性
    {
        return $this->quantity * 10;  // 執行程式 Product::find(1)->current_price,就會執行這段function
    }
}

接著到ProductController.php
修改以下方法,使用ORM的方式做CRUD

<?php

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class ProductController extends Controller
{
    public function index()
    {
        return Product::all(); // 回傳product table 所有資料
    }

    public function create()
    {
        //
    }

    public function store(Request $request)
    {
        $newdata = $request->all();
        $data = Product::create($newdata); // 新增表單回傳
        return response($data);
    }

    public function show($id)
    {
        //
    }

    public function edit($id)
    {
        //
    }

    public function update(Request $request, $id)
    {
        $form = $request->all();
        $items = Product::find($id); // 找到要修改資料
        $items->fill(['quantity' => $form['quantity']]); // 修改
        $items->save(); // 儲存
        return response()->json(true); // 成功的話回傳true
    }

    public function destroy($id)
    {
        Product::find($id)->delete(); // 找到刪除資料刪除
        return response()->json(true); // 刪除成功回傳true
    }
}

都設定好後可以去postman測試看看哦,測試方法跟前一章節一樣。


上一篇
[Day27] 使用POSTMAN測試
下一篇
[Day29]Laravel Middleware
系列文
後端新手PHP+Laravel筆記30

尚未有邦友留言

立即登入留言