การเขียนเว็บด้วย Laravel เบื่องต้น ( เพิ่ม ลบ เเก้ไข )

laravel featured

การเขียนเว็บด้วย Laravel  เบื่องต้น ( เพิ่ม ลบ เเก้ไข )

การเขียนฟังก์ชันเพิ่ม ลบ และแก้ไขข้อมูลใน Laravel นั้นสามารถทำได้โดยใช้วิธีการควบคุมจาก Controller และแสดงผลผ่าน View โดยมีตัวอย่างวิธีการเขียนดังนี้:

1. สร้าง Controller: ใช้คำสั่ง Artisan เพื่อสร้าง Controller ใหม่ เช่น:
bash
ตัวอย่างโค้ด
php artisan make:controller ItemController

2. เขียนโค้ดใน Controller: ไปที่ app/Http/Controllers/ItemController.php และเพิ่มโค้ดสำหรับการเพิ่ม ลบ แก้ไขข้อมูล: php
ตัวอย่างโค้ด
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Item; // ใช้โมเดลที่คุณสร้าง

class ItemController extends Controller

{

    // แสดงรายการข้อมูลทั้งหมด

    public function index()

    {

        $items = Item::all();

        return view(‘items.index’, compact(‘items’));

    }

    // แสดงฟอร์มสร้างข้อมูลใหม่

    public function create()

    {

        return view(‘items.create’);

    }

    // บันทึกข้อมูลใหม่

    public function store(Request $request)

    {

        $request->validate([

            ‘name’ => ‘required’,

            ‘description’ => ‘required’,

        ]);

        Item::create($request->all());

        return redirect()->route(‘items.index’)

                         ->with(‘success’, ‘เพิ่มข้อมูลสำเร็จ’);

    }

    // แสดงฟอร์มแก้ไขข้อมูล

    public function edit($id)

    {

        $item = Item::findOrFail($id);

        return view(‘items.edit’, compact(‘item’));

    }

    // อัปเดตข้อมูลที่มีอยู่

    public function update(Request $request, $id)

    {

        $request->validate([

            ‘name’ => ‘required’,

            ‘description’ => ‘required’,

        ]);

        $item = Item::findOrFail($id);

        $item->update($request->all());

        return redirect()->route(‘items.index’)

                         ->with(‘success’, ‘แก้ไขข้อมูลสำเร็จ’);

    }

    // ลบข้อมูล

    public function destroy($id)

    {

        $item = Item::findOrFail($id);

        $item->delete();

        return redirect()->route(‘items.index’)

                         ->with(‘success’, ‘ลบข้อมูลสำเร็จ’);

    }

}

3. สร้าง Views: สร้างไฟล์ blade template เพื่อแสดงฟอร์มและตารางข้อมูล เช่น resources/views/items/index.blade.php, create.blade.php, และ edit.blade.php

4. ตั้งค่า Route: เพิ่ม Route ใน routes/web.php เพื่อเชื่อมโยง URL กับ Controller:php
ตัวอย่างโค้ด
use App\Http\Controllers\ItemController;

Route::resource(‘items’, ItemController::class);

5.สร้าง Model และ Migration: หากยังไม่มีโมเดลและฐานข้อมูล ให้สร้างด้วยคำสั่ง:bash
ตัวอย่างโค้ด
php artisan make:model Item -m

จากนั้นไปที่ไฟล์ migration ใน database/migrations และเพิ่มคอลัมน์ที่ต้องการ เช่น:php
ตัวอย่างโค้ด
public function up()

{

    Schema::create(‘items’, function (Blueprint $table) {

        $table->id();

        $table->string(‘name’);

        $table->text(‘description’);

        $table->timestamps();

    });

}

แล้วรันคำสั่ง:
bash
คัดลอกโค้ด
php artisan migrate

เพียงเท่านี้ คุณก็สามารถเขียนฟังก์ชันเพิ่ม ลบ และแก้ไขข้อมูลใน Laravel ได้แล้ว

ขั้นตอนการสร้างระบบเพิ่ม ลบ แก้ไขใน Laravel 

ขั้นตอนที่ 1: สร้างโมเดลและฐานข้อมูล

1. สร้างโมเดลพร้อมไฟล์ migration:bash
ตัวอย่างโค้ด
php artisan make:model Item -m

2.เปิดไฟล์ migration ที่อยู่ใน database/migrations และเพิ่มคอลัมน์ที่คุณต้องการ เช่น:php
ตัวอย่างโค้ด
public function up()

{

    Schema::create(‘items’, function (Blueprint $table) {

        $table->id();

        $table->string(‘name’);

        $table->text(‘description’);

        $table->timestamps();

    });

}

3.รัน migration เพื่อสร้างตารางในฐานข้อมูล:bash
ตัวอย่างโค้ด
php artisan migrate

ขั้นตอนที่ 2: สร้าง Controller

1.ใช้คำสั่งนี้เพื่อสร้าง Controller:bash
ตัวอย่างโค้ด
php artisan make:controller ItemController –resource

2.ไปที่ app/Http/Controllers/ItemController.php และเขียนโค้ดเพื่อจัดการเพิ่ม ลบ แก้ไข:php
ตัวอย่างโค้ด
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Item;

class ItemController extends Controller

{

    public function index()

    {

        $items = Item::all();

        return view(‘items.index’, compact(‘items’));

    }

    public function create()

    {

        return view(‘items.create’);

    }

    public function store(Request $request)

    {

        $request->validate([

            ‘name’ => ‘required’,

            ‘description’ => ‘required’,

        ]);

        Item::create($request->all());

        return redirect()->route(‘items.index’)

                         ->with(‘success’, ‘เพิ่มข้อมูลสำเร็จ’);

    }

    public function edit($id)

    {

        $item = Item::findOrFail($id);

        return view(‘items.edit’, compact(‘item’));

    }

    public function update(Request $request, $id)

    {

        $request->validate([

            ‘name’ => ‘required’,

            ‘description’ => ‘required’,

        ]);

        $item = Item::findOrFail($id);

        $item->update($request->all());

        return redirect()->route(‘items.index’)

                         ->with(‘success’, ‘แก้ไขข้อมูลสำเร็จ’);

    }

    public function destroy($id)

    {

        $item = Item::findOrFail($id);

        $item->delete();

        return redirect()->route(‘items.index’)

                         ->with(‘success’, ‘ลบข้อมูลสำเร็จ’);

    }

}

ขั้นตอนที่ 3: สร้าง View Templates

สร้างโฟลเดอร์ resources/views/items และเพิ่มไฟล์ index.blade.php, create.blade.php, และ edit.blade.php ตามลำดับ
ตัวอย่าง index.blade.php:html
ตัวอย่างโค้ด
@extends(‘layouts.app’)

@section(‘content’)

    <h1>รายการข้อมูล</h1>

    <a href=”{{ route(‘items.create’) }}” class=”btn btn-primary”>เพิ่มข้อมูลใหม่</a>

    @if(session(‘success’))

        <div class=”alert alert-success”>{{ session(‘success’) }}</div>

    @endif

    <table class=”table”>

        <thead>

            <tr>

                <th>ชื่อ</th>

                <th>รายละเอียด</th>

                <th>การจัดการ</th>

            </tr>

        </thead>

        <tbody>

            @foreach($items as $item)

                <tr>

                    <td>{{ $item->name }}</td>

                    <td>{{ $item->description }}</td>

                    <td>

                        <a href=”{{ route(‘items.edit’, $item->id) }}” class=”btn btn-warning”>แก้ไข</a>

                        <form action=”{{ route(‘items.destroy’, $item->id) }}” method=”POST” style=”display:inline;”>

                            @csrf

                            @method(‘DELETE’)

                            <button type=”submit” class=”btn btn-danger” onclick=”return confirm(‘ยืนยันการลบ?’)”>ลบ</button>

                        </form>

                    </td>

                </tr>

            @endforeach

        </tbody>

    </table>

@endsection

  1. สร้าง create.blade.php และ edit.blade.php โดยมีฟอร์มสำหรับการกรอกข้อมูลที่คล้ายกัน:html
    ตัวอย่างโค้ด

@extends(‘layouts.app’)

@section(‘content’)

    <h1>เพิ่มข้อมูลใหม่</h1>

    <form action=”{{ route(‘items.store’) }}” method=”POST”>

        @csrf

        <div class=”form-group”>

            <label for=”name”>ชื่อ</label>

            <input type=”text” name=”name” class=”form-control” required>

        </div>

        <div class=”form-group”>

            <label for=”description”>รายละเอียด</label>

            <textarea name=”description” class=”form-control” required></textarea>

        </div>

        <button type=”submit” class=”btn btn-success”>บันทึก</button>

    </form>

@endsection

ขั้นตอนที่ 4: ตั้งค่า Route

เพิ่มเส้นทางใน routes/web.php:php

ตัวอย่างโค้ด

use App\Http\Controllers\ItemController;

Route::resource(‘items’, ItemController::class);

ขั้นตอนที่ 5: ทดสอบและตรวจสอบ

เรียกใช้โครงการ Laravel ของคุณในเบราว์เซอร์และทดสอบการเพิ่ม ลบ แก้ไขข้อมูลโดยเข้าไปที่เส้นทาง http://your-app-url/items

การทำตามขั้นตอนเหล่านี้จะช่วยให้คุณเข้าใจและสร้างฟังก์ชันเพิ่ม ลบ และแก้ไขใน Laravel ได้อย่างสมบูรณ์

ในการเขียนโปรแกรม Laravel สำหรับการเพิ่ม ลบ แก้ไขข้อมูล มีรูปแบบที่ควรจำและทำความเข้าใจให้ดี เพื่อช่วยให้การเขียนโค้ดเป็นไปอย่างถูกต้องและมีประสิทธิภาพ ดังนี้:

  1. Route และเส้นทาง:
    • ควรจดจำรูปแบบของการใช้ Route::resource() ซึ่งเป็นคำสั่งที่ใช้สร้างเส้นทางแบบ RESTful โดยจะเชื่อมโยงกับเมธอดต่าง ๆ ใน Controller เช่น index, create, store, edit, update, และ destroy

ตัวอย่าง:php
ตัวอย่างโค้ด
Route::resource(‘items’, ItemController::class);

  1. Controller Method:
    • ควรจำวิธีการสร้างและจัดการกับเมธอดใน Controller ให้ครบถ้วน เช่น:
      • index(): ใช้สำหรับแสดงรายการข้อมูลทั้งหมด
      • create(): ใช้แสดงฟอร์มการสร้างข้อมูลใหม่
      • store(): ใช้สำหรับบันทึกข้อมูลใหม่ลงฐานข้อมูล
      • edit(): ใช้แสดงฟอร์มแก้ไขข้อมูล
      • update(): ใช้สำหรับอัปเดตข้อมูลที่มีอยู่ในฐานข้อมูล
      • destroy(): ใช้สำหรับลบข้อมูล
  2. การใช้ Blade Template:

จำโครงสร้างการใช้ Blade สำหรับแสดงผลข้อมูลและสร้างฟอร์ม เช่น:html
ตัวอย่างโค้ด
@extends(‘layouts.app’)

@section(‘content’)

    <!– โค้ดแสดงข้อมูล –>

@endsection

จำการใช้ @csrf และ @method(‘PUT’ หรือ ‘DELETE’) เพื่อป้องกัน CSRF และกำหนดเมธอดสำหรับฟอร์มใน Laravel

  1. การใช้ฟังก์ชัน Redirect และ Session:

ควรจดจำการใช้ redirect()->route() สำหรับเปลี่ยนหน้าและส่งข้อความยืนยันไปแสดงผล เช่น:
php
ตัวอย่างโค้ด
return redirect()->route(‘items.index’)->with(‘success’, ‘ข้อความสำเร็จ’);

  1. การ Validate ข้อมูล:

จำการใช้ $request->validate() เพื่อทำการตรวจสอบความถูกต้องของข้อมูลที่ส่งมา เช่น:
php
คัดลอกโค้ด
$request->validate([

    ‘name’ => ‘required’,

    ‘description’ => ‘required’,

]);

  1. การใช้ Model:

จำการสร้างและใช้ Model ในการเชื่อมต่อกับฐานข้อมูล และใช้คำสั่งต่าง ๆ เช่น Item::create(), Item::findOrFail(), Item::update(), และ Item::delete() เพื่อจัดการข้อมูล

  1. การใช้ Migration:

ควรเข้าใจการใช้ migration เพื่อสร้างหรือปรับปรุงโครงสร้างของฐานข้อมูล เช่น php artisan migrate และ php artisan make:migration

  1. การใช้ Blade Template Engine Syntax:

จดจำรูปแบบต่าง ๆ ของ Blade เช่น {{ $variable }} สำหรับแสดงค่า และ @foreach, @if, @csrf, @method, @yield, และ @extends

การจดจำรูปแบบเหล่านี้จะช่วยให้คุณสามารถสร้างแอปพลิเคชัน Laravel ที่มีฟังก์ชันการเพิ่ม ลบ แก้ไขได้อย่างมีประสิทธิภาพ

มาดูวิธีการใช้งานแต่ละส่วนที่จำเป็นในการพัฒนา Laravel เพื่อให้คุณสามารถเข้าใจและนำไปใช้ได้อย่างถูกต้อง:

1. Route และเส้นทาง

  • เส้นทางใน Laravel คือการกำหนด URL ที่จะเชื่อมต่อกับเมธอดใน Controller

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
use App\Http\Controllers\ItemController;

Route::resource(‘items’, ItemController::class);

  • คำสั่งนี้จะสร้างเส้นทางทั้งหมดที่เกี่ยวข้องกับการทำงาน CRUD (Create, Read, Update, Delete) เช่น:
    • GET /items → index() เมธอดใน ItemController สำหรับแสดงรายการข้อมูล
    • GET /items/create → create() สำหรับแสดงฟอร์มการสร้างข้อมูล
    • POST /items → store() สำหรับบันทึกข้อมูลใหม่
    • GET /items/{id}/edit → edit() สำหรับแสดงฟอร์มแก้ไขข้อมูล
    • PUT/PATCH /items/{id} → update() สำหรับอัปเดตข้อมูล
    • DELETE /items/{id} → destroy() สำหรับลบข้อมูล

2. การเขียน Controller

Controller จะใช้เพื่อจัดการคำขอจากผู้ใช้และส่งข้อมูลไปยัง View

ตัวอย่างการใช้งานใน ItemController:php
ตัวอย่างโค้ด
public function index()

{

    $items = Item::all(); // ดึงข้อมูลทั้งหมดจากฐานข้อมูล

    return view(‘items.index’, compact(‘items’)); // ส่งข้อมูลไปที่ view

}

public function create()

{

    return view(‘items.create’); // แสดงฟอร์มสร้างข้อมูล

}

public function store(Request $request)

{

    $request->validate([

        ‘name’ => ‘required’,

        ‘description’ => ‘required’,

    ]);

    Item::create($request->all()); // บันทึกข้อมูลลงฐานข้อมูล

    return redirect()->route(‘items.index’)->with(‘success’, ‘เพิ่มข้อมูลสำเร็จ’);

}

3. การใช้ Blade Template

Blade เป็นเทมเพลตเอนจิ้นของ Laravel ที่ช่วยให้เขียนโค้ด HTML ผสมกับ PHP ได้ง่าย

ตัวอย่างการสร้างหน้าแสดงรายการ (index.blade.php):html
ตัวอย่างโค้ด
@extends(‘layouts.app’)

@section(‘content’)

    <h1>รายการข้อมูล</h1>

    <a href=”{{ route(‘items.create’) }}” class=”btn btn-primary”>เพิ่มข้อมูลใหม่</a>

    @if(session(‘success’))

        <div class=”alert alert-success”>{{ session(‘success’) }}</div>

    @endif

    <table class=”table”>

        <thead>

            <tr>

                <th>ชื่อ</th>

                <th>รายละเอียด</th>

                <th>การจัดการ</th>

            </tr>

        </thead>

        <tbody>

            @foreach($items as $item)

                <tr>

                    <td>{{ $item->name }}</td>

                    <td>{{ $item->description }}</td>

                    <td>

                        <a href=”{{ route(‘items.edit’, $item->id) }}” class=”btn btn-warning”>แก้ไข</a>

                        <form action=”{{ route(‘items.destroy’, $item->id) }}” method=”POST” style=”display:inline;”>

                            @csrf

                            @method(‘DELETE’)

                            <button type=”submit” class=”btn btn-danger” onclick=”return confirm(‘ยืนยันการลบ?’)”>ลบ</button>

                        </form>

                    </td>

                </tr>

            @endforeach

        </tbody>

    </table>

@endsection

4. การใช้ฟังก์ชัน Redirect และ Session

การทำ redirect และส่งข้อความไปแสดงใน View:php
ตัวอย่างโค้ด
return redirect()->route(‘items.index’)->with(‘success’, ‘เพิ่มข้อมูลสำเร็จ’);

ฟังก์ชันนี้จะเปลี่ยนเส้นทางไปที่หน้า index พร้อมกับส่งข้อความที่เก็บใน session ไปแสดงผล

5. การ Validate ข้อมูล

ใช้เพื่อทำการตรวจสอบความถูกต้องของข้อมูลที่รับมา:php
ตัวอย่างโค้ด
$request->validate([

    ‘name’ => ‘required’, // ต้องไม่ว่างเปล่า

    ‘description’ => ‘required’,

]);

เมื่อข้อมูลไม่ผ่านการตรวจสอบ Laravel จะส่งกลับไปยังหน้าเดิมพร้อมกับข้อผิดพลาดอัตโนมัติ

6. การใช้ Model

Model ใช้เพื่อเชื่อมต่อกับฐานข้อมูลและดำเนินการต่าง ๆ เช่นการสร้างและอัปเดตข้อมูล

ตัวอย่างการบันทึกข้อมูล:php
ตัวอย่างโค้ด
Item::create($request->all()); // บันทึกข้อมูลลงในฐานข้อมูล

ตัวอย่างการอัปเดตข้อมูล:php
ตัวอย่างโค้ด
$item = Item::findOrFail($id);

$item->update($request->all()); // อัปเดตข้อมูลในฐานข้อมูล

7. การใช้ Migration

Migration ใช้สำหรับสร้างหรือแก้ไขโครงสร้างฐานข้อมูล

คำสั่งการสร้าง migration:bash
ตัวอย่างโค้ด
php artisan make:migration create_items_table

การรัน migration:bash
ตัวอย่างโค้ด
php artisan migrate

การทำความเข้าใจและฝึกฝนการใช้ฟังก์ชันเหล่านี้จะช่วยให้คุณพัฒนาแอปพลิเคชัน Laravel ที่มีประสิทธิภาพและสามารถทำงาน CRUD ได้อย่างครบถ้วน

ใน Laravel ตัวแปรและฟังก์ชันมีบทบาทสำคัญในการทำงาน โดยใช้เพื่อจัดการและประมวลผลข้อมูล รวมถึงควบคุมการไหลของโปรแกรมในระบบ เรามาดูความหมายและการใช้งานของตัวแปรและฟังก์ชันใน Laravel กัน

1. ตัวแปร (Variable)

ตัวแปรคือพื้นที่ในหน่วยความจำที่ใช้สำหรับเก็บข้อมูลซึ่งสามารถเปลี่ยนแปลงได้ระหว่างการทำงานของโปรแกรม ตัวแปรใน Laravel ถูกใช้ใน Controller, View, และ Model เพื่อจัดเก็บและส่งต่อข้อมูลต่าง ๆ

การสร้างตัวแปรใน PHP (และ Laravel) มักจะใช้ $ นำหน้า เช่น:
php
คัดลอกโค้ด
$name = ‘John Doe’;

$age = 30;

ใน Laravel ตัวแปรสามารถส่งต่อจาก Controller ไปยัง View ได้โดยใช้ compact() หรือผ่านการเรียกใช้โดยตรง เช่น:
php
คัดลอกโค้ด
public function index()

{

    $items = Item::all(); // ดึงข้อมูลทั้งหมดจากฐานข้อมูล

    return view(‘items.index’, compact(‘items’)); // ส่งตัวแปร $items ไปยัง View

}

2. ฟังก์ชัน (Function)

ฟังก์ชันใน Laravel คือชุดคำสั่งที่ทำงานร่วมกันเพื่อทำงานเฉพาะอย่าง เช่น การดึงข้อมูลจากฐานข้อมูล การตรวจสอบความถูกต้องของข้อมูล หรือการเปลี่ยนเส้นทางผู้ใช้

การประกาศฟังก์ชันใน PHP มีรูปแบบดังนี้:
php
คัดลอกโค้ด
function functionName($parameter1, $parameter2) {

    // คำสั่งที่ต้องการให้ทำ

    return $parameter1 + $parameter2;

}

ใน Laravel ฟังก์ชันมักถูกประกาศใน Controller เพื่อจัดการคำขอ (Request) และการตอบสนอง (Response) เช่น:
php
คัดลอกโค้ด
public function show($id)

{

    $item = Item::find($id); // ค้นหาข้อมูลจากฐานข้อมูลโดยใช้ ID

    return view(‘items.show’, compact(‘item’)); // ส่งข้อมูลไปยัง View

}

ตัวอย่างฟังก์ชันที่ใช้บ่อยใน Laravel:

all(): ใช้ดึงข้อมูลทั้งหมดจากฐานข้อมูลphp
ตัวอย่างโค้ด
$items = Item::all();

find($id): ค้นหาข้อมูลโดยใช้ค่า IDphp
ตัวอย่างโค้ด
$item = Item::find($id);

create($data): ใช้บันทึกข้อมูลใหม่ในฐานข้อมูล โดยต้องใช้ฟังก์ชัน fillable ใน Model เพื่อระบุคอลัมน์ที่อนุญาตให้เพิ่มข้อมูลได้php
ตัวอย่างโค้ด
Item::create([

    ‘name’ => ‘New Item’,

    ‘description’ => ‘This is a new item’

]);

update($data): อัปเดตข้อมูลที่มีอยู่php
ตัวอย่างโค้ด
$item = Item::findOrFail($id);

$item->update([

    ‘name’ => ‘Updated Item’

]);

delete(): ลบข้อมูลออกจากฐานข้อมูลphp
ตัวอย่างโค้ด
$item = Item::findOrFail($id);

$item->delete();

การใช้งานตัวแปรใน View

ใน Laravel เราสามารถใช้ตัวแปรที่ส่งมาจาก Controller ใน View ได้โดยใช้เครื่องหมายวงเล็บปีกกา {{ }} เช่น:html
ตัวอย่างโค้ด
<h1>ชื่อสินค้า: {{ $item->name }}</h1>

<p>รายละเอียด: {{ $item->description }}</p>

ฟังก์ชันที่ใช้ใน View (Blade)

Laravel มีฟังก์ชันที่ใช้ใน Blade เช่น:

@foreach: ใช้ในการวนซ้ำข้อมูลhtml
ตัวอย่างโค้ด
@foreach($items as $item)

    <p>{{ $item->name }}</p>

@endforeach

@if: ใช้ในการตรวจสอบเงื่อนไขhtml
ตัวอย่างโค้ด
@if($item->name == ‘Sample’)

    <p>สินค้าตัวอย่าง</p>

@endif

การเข้าใจตัวแปรและฟังก์ชันเหล่านี้จะช่วยให้คุณสามารถพัฒนาแอปพลิเคชัน Laravel ได้อย่างมีประสิทธิภาพและสามารถเขียนโค้ดที่อ่านง่ายและจัดการได้ดี

การพัฒนาแอปพลิเคชันด้วย Laravel มีหลากหลายส่วนที่ควรทำความเข้าใจเพื่อให้คุณสามารถพัฒนาและจัดการระบบได้อย่างครบถ้วน นอกจากการทำงานพื้นฐาน CRUD (Create, Read, Update, Delete) ยังมีหัวข้อที่สำคัญอื่น ๆ ที่ควรเรียนรู้เพิ่มเติม ดังนี้:

1. Middleware

Middleware ใช้ในการตรวจสอบและกรองคำขอก่อนที่จะถูกส่งไปยัง Controller เช่น การตรวจสอบการยืนยันตัวตน (Authentication) หรือการกำหนดสิทธิ์ในการเข้าถึง (Authorization)

ตัวอย่างการใช้ Middleware:php
ตัวอย่างโค้ด
public function __construct()

{

    $this->middleware(‘auth’); // กำหนดให้ต้องล็อกอินก่อนเข้าถึง

}

2. Routing ขั้นสูง

การสร้างเส้นทางขั้นสูง เช่น การใช้ Route Groups และ Route Parameters

การกำหนด Route ที่มีการใช้ prefix หรือ middleware ร่วมกัน:php
ตัวอย่างโค้ด
Route::prefix(‘admin’)->middleware(‘auth’)->group(function () {

    Route::get(‘/dashboard’, [DashboardController::class, ‘index’]);

    Route::resource(‘users’, UserController::class);

});

3. Authentication และ Authorization

การจัดการการยืนยันตัวตน (เช่น การล็อกอินและลงทะเบียน) และการกำหนดสิทธิ์ผู้ใช้

การใช้ Laravel Breeze หรือ Laravel Fortify เพื่อช่วยในการสร้างระบบการยืนยันตัวตนอย่างรวดเร็ว

4. Eloquent ORM และการทำงานกับความสัมพันธ์ของข้อมูล

Eloquent ORM คือการใช้การทำงานกับฐานข้อมูลแบบ Object Relational Mapping ใน Laravel

การจัดการกับความสัมพันธ์ของข้อมูล เช่น One-to-Many, Many-to-Many, และ One-to-One:php
ตัวอย่างโค้ด
// ความสัมพันธ์ One-to-Many

public function posts()

{

    return $this->hasMany(Post::class);

}

5. การทำงานกับการ Migration และ Seeder

การใช้ Migration เพื่อจัดการโครงสร้างฐานข้อมูล และ Seeder สำหรับการใส่ข้อมูลเริ่มต้นในฐานข้อมูล

คำสั่งที่ใช้:bash
ตัวอย่างโค้ด
php artisan make:migration create_posts_table

php artisan migrate

php artisan db:seed

6. Validation ขั้นสูง

การใช้ Form Request สำหรับการ Validate ข้อมูลที่ซับซ้อน

การสร้าง Form Request:bash
ตัวอย่างโค้ด
php artisan make:request StoreItemRequest

7. การทำงานกับ API

การสร้าง RESTful API และการตอบสนองข้อมูลแบบ JSON

การใช้ Laravel Sanctum หรือ Passport สำหรับการจัดการ Authentication ของ APIphp
ตัวอย่างโค้ด
Route::middleware(‘auth:sanctum’)->get(‘/user’, function (Request $request) {

    return $request->user();

});

8. การจัดการไฟล์และการอัปโหลด

การจัดการไฟล์ใน Laravel เช่น การอัปโหลดไฟล์ การย้ายไฟล์ และการลบไฟล์php
ตัวอย่างโค้ด
$path = $request->file(‘avatar’)->store(‘avatars’);

9. Event และ Listener

การใช้ Event และ Listener เพื่อจัดการกระบวนการต่าง ๆ เมื่อมีการเกิดเหตุการณ์ เช่น การส่งอีเมลเมื่อผู้ใช้ลงทะเบียนเสร็จสิ้น

การสร้าง Event และ Listener:bash
ตัวอย่างโค้ด
php artisan make:event UserRegistered

php artisan make:listener SendWelcomeEmail –event=UserRegistered

10. Queue และการประมวลผลแบบ Asynchronous

การใช้ Queue ใน Laravel เพื่อจัดการงานที่ใช้เวลานาน เช่น การส่งอีเมล หรือการประมวลผลข้อมูลเบื้องหลัง

การตั้งค่า Queue และการเรียกใช้:php
ตัวอย่างโค้ด
dispatch(new SendEmailJob($user));

11. การใช้ Composer และ Package ของบุคคลที่สาม

การติดตั้งและจัดการแพ็กเกจเสริมเพื่อเพิ่มฟังก์ชันต่าง ๆ ให้กับ Laravel เช่น Spatie, Laravel Debugbar, ฯลฯ 

bash ตัวอย่างโค้ด
composer require spatie/laravel-permission

12. การทำงานกับ Cache และการเพิ่มประสิทธิภาพ

การใช้ Cache เพื่อเพิ่มความเร็วในการดึงข้อมูล เช่นการใช้ Redis หรือ Memcached

 php ตัวอย่างโค้ด
Cache::put(‘key’, ‘value’, $seconds);

13. การทดสอบ (Testing)

การทดสอบ Unit Test และ Feature Test เพื่อให้มั่นใจว่าระบบทำงานได้ตามที่ต้องการ
php ตัวอย่างโค้ด
public function testExample()

{

    $response = $this->get(‘/’);

    $response->assertStatus(200);

}

การศึกษาและทำความเข้าใจหัวข้อเหล่านี้จะช่วยให้คุณสามารถพัฒนาแอปพลิเคชันด้วย Laravel ได้อย่างมีประสิทธิภาพและครอบคลุมทุกความต้องการ

ใน Laravel การทำงานกับอ็อบเจกต์ (Objects) เป็นส่วนสำคัญของการพัฒนาแอปพลิเคชัน เนื่องจาก Laravel เป็นเฟรมเวิร์กที่ใช้ภาษา PHP ซึ่งรองรับการเขียนโปรแกรมเชิงวัตถุ (OOP – Object-Oriented Programming) การทำความเข้าใจเกี่ยวกับอ็อบเจกต์ที่ใช้ใน Laravel จะช่วยให้คุณพัฒนาแอปพลิเคชันได้อย่างมีประสิทธิภาพยิ่งขึ้น ต่อไปนี้เป็นอ็อบเจกต์หลักที่พบได้บ่อยใน Laravel:

1. Model Object

Model คืออ็อบเจกต์ที่แทนตารางในฐานข้อมูลและจัดการข้อมูลที่เกี่ยวข้องกับตารางนั้น ๆ โดยใช้ Eloquent ORM ใน Laravel

ตัวอย่างการสร้างและใช้งาน Model:php
ตัวอย่างโค้ด
$user = new User(); // สร้างอ็อบเจกต์ใหม่ของ User model

$user->name = ‘John Doe’;

$user->email = ‘john@example.com’;

$user->save(); // บันทึกข้อมูลลงในฐานข้อมูล

$user = User::find(1); // ดึงอ็อบเจกต์ User ที่มี ID เท่ากับ 1

2. Request Object

Request Object ใช้เพื่อรับข้อมูลที่ส่งมาจากผู้ใช้ผ่าน HTTP Request

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
public function store(Request $request)

{

    $name = $request->input(‘name’); // รับค่าจากฟิลด์ name

    $email = $request->email; // รับค่าจากฟิลด์ email

}

3. Response Object

Response Object ใช้ในการส่งข้อมูลกลับไปยังผู้ใช้ โดยสามารถเป็น HTML, JSON, หรืออื่น ๆ ได้

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
return response()->json([‘message’ => ‘Success’], 200); // ส่ง JSON response พร้อมสถานะ 200

4. Controller Object

Controller เป็นอ็อบเจกต์ที่ใช้จัดการคำขอจากผู้ใช้และควบคุมการประมวลผลของแอปพลิเคชัน

ตัวอย่างการสร้าง Controller:php
ตัวอย่างโค้ด
class UserController extends Controller

{

    public function index()

    {

        $users = User::all(); // ดึงข้อมูลทั้งหมดของผู้ใช้

        return view(‘users.index’, compact(‘users’)); // ส่งข้อมูลไปยัง View

    }

}

5. Collection Object

Collection เป็นอ็อบเจกต์ที่ใช้ในการจัดการชุดของข้อมูล เช่น ผลลัพธ์ที่ได้จากการ query ฐานข้อมูล

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$users = User::all(); // คืนค่าเป็น Collection object

$filteredUsers = $users->filter(function ($user) {

    return $user->active; // กรองเฉพาะผู้ใช้ที่ active

});

6. Middleware Object

Middleware เป็นอ็อบเจกต์ที่ใช้กรองและจัดการคำขอก่อนที่จะเข้าสู่ Controller เช่น การตรวจสอบการยืนยันตัวตน

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
public function handle($request, Closure $next)

{

    if (!$request->user()) {

        return redirect(‘login’);

    }

    return $next($request); // ส่งต่อคำขอไปยัง Controller

}

7. Validator Object

Validator ใช้สำหรับตรวจสอบความถูกต้องของข้อมูลที่รับเข้ามา

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$validator = Validator::make($request->all(), [

    ‘name’ => ‘required|max:255’,

    ’email’ => ‘required|email’,

]);

if ($validator->fails()) {

    return redirect(‘form’)->withErrors($validator)->withInput();

}

8. Query Builder Object

Query Builder ใช้สำหรับเขียนคำสั่ง SQL เพื่อดึงข้อมูลจากฐานข้อมูลในรูปแบบของอ็อบเจกต์ที่ง่ายต่อการทำงาน

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$users = DB::table(‘users’)->where(‘active’, 1)->get(); // คืนค่าเป็น Collection

9. Session Object

Session ใช้ในการจัดการข้อมูลชั่วคราวที่ต้องการเก็บขณะผู้ใช้ใช้งานระบบ เช่น การเก็บข้อมูลการเข้าสู่ระบบ

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
session([‘key’ => ‘value’]); // ตั้งค่าข้อมูลใน session

$value = session(‘key’); // ดึงค่าจาก session

10. Event และ Listener Object

Event และ Listener ใช้สำหรับการทำงานแบบ Event-driven ในระบบ เช่น การส่งอีเมลหลังจากผู้ใช้ลงทะเบียนเสร็จสิ้น

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
event(new UserRegistered($user)); // เรียกใช้งาน Event

การทำความเข้าใจเกี่ยวกับอ็อบเจกต์เหล่านี้จะช่วยให้คุณพัฒนาแอปพลิเคชันด้วย Laravel ได้อย่างมีประสิทธิภาพและครอบคลุมทุกความต้องการของระบบ.

all(), find(), และ findOrFail() เป็น เมธอด (Methods) ที่อยู่ใน Eloquent ORM ของ Laravel ซึ่งใช้ในการดึงข้อมูลจากฐานข้อมูลผ่าน Model ที่เชื่อมต่อกับตารางในฐานข้อมูล

รายละเอียดของแต่ละเมธอด:

  1. all()
    • ใช้เพื่อดึงข้อมูลทั้งหมดจากตารางในฐานข้อมูล
    • คืนค่าเป็น Collection ที่มีรายการข้อมูลทั้งหมดในตารางนั้น

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$items = Item::all(); // ดึงข้อมูลทั้งหมดจากตาราง items

  1. find()
    • ใช้เพื่อดึงข้อมูลหนึ่งรายการจากตารางโดยอ้างอิงจากค่า id หรือคีย์หลักที่ระบุ
    • คืนค่าเป็น Model Instance หากพบข้อมูล หรือ null หากไม่พบ

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$item = Item::find(1); // ดึงข้อมูลของรายการที่มี id เท่ากับ 1

  1. findOrFail()
    • ใช้เพื่อดึงข้อมูลหนึ่งรายการจากตารางโดยอ้างอิงจากค่า id หรือคีย์หลักที่ระบุ
    • คืนค่าเป็น Model Instance หากพบข้อมูล แต่หากไม่พบข้อมูลจะทำการโยน Exception (ModelNotFoundException) ซึ่งทำให้สามารถจัดการกรณีที่ไม่พบข้อมูลได้ง่าย

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$item = Item::findOrFail(1); // ดึงข้อมูลของรายการที่มี id เท่ากับ 1 หรือโยนข้อผิดพลาดหากไม่พบข้อมูล

การใช้งานในสถานการณ์จริง:

**all()

all() มักใช้เมื่อคุณต้องการดึงข้อมูลทั้งหมดในตารางเพื่อนำไปแสดงในหน้าแสดงรายการ เช่น หน้าแสดงสินค้าหรือหน้ารายการผู้ใช้ทั้งหมด โดยไม่มีเงื่อนไขหรือข้อจำกัดใด ๆ:
php
คัดลอกโค้ด
$products = Product::all(); // ดึงสินค้าทั้งหมดจากตาราง products

find() เหมาะสำหรับการค้นหาข้อมูลเฉพาะเจาะจงโดยใช้คีย์หลัก เช่น id ของข้อมูล หากต้องการแสดงข้อมูลผู้ใช้หรือสินค้าเฉพาะรายการที่มี id ที่ทราบ เช่น:php
ตัวอย่างโค้ด
$user = User::find(5); // ดึงข้อมูลผู้ใช้ที่มี id เท่ากับ 5

if ($user) {

    // ดำเนินการเมื่อพบข้อมูล

} else {

    // ดำเนินการเมื่อไม่พบข้อมูล

}

findOrFail() เป็นวิธีที่ปลอดภัยกว่าในการดึงข้อมูลเฉพาะเจาะจง เพราะหากไม่พบข้อมูลตามเงื่อนไขที่ระบุ ระบบจะโยนข้อผิดพลาด ModelNotFoundException ทันที ทำให้สามารถจัดการการไม่พบข้อมูลได้ง่าย เช่นการแสดงหน้า 404:
php
คัดลอกโค้ด
try {

    $order = Order::findOrFail(10); // ดึงข้อมูล order ที่มี id เท่ากับ 10

} catch (ModelNotFoundException $e) {

    return response()->view(‘errors.404’, [], 404); // แสดงหน้า 404 เมื่อไม่พบข้อมูล

}

สรุป:

  • all(): ใช้สำหรับดึงข้อมูลทั้งหมดจากตารางโดยไม่มีเงื่อนไข
  • find(): ใช้สำหรับค้นหาข้อมูลตาม id หรือคีย์หลัก โดยคืนค่า null หากไม่พบข้อมูล
  • findOrFail(): ใช้สำหรับค้นหาข้อมูลตาม id หรือคีย์หลัก โดยโยนข้อผิดพลาดหากไม่พบข้อมูล

ทั้งสามเมธอดนี้ช่วยให้การทำงานกับฐานข้อมูลใน Laravel เป็นไปอย่างมีประสิทธิภาพและสะดวกต่อการจัดการข้อมูลในรูปแบบต่าง ๆ

ใน Laravel ยังมีเมธอดอื่น ๆ ที่ใช้ในการดึงข้อมูลและจัดการกับฐานข้อมูลเพิ่มเติม ซึ่งมีความสำคัญและใช้บ่อยในการพัฒนาแอปพลิเคชัน ต่อไปนี้เป็นเมธอดที่น่าสนใจเพิ่มเติม:

1. where()

ใช้สำหรับการกรองข้อมูลที่ต้องการดึงจากฐานข้อมูลตามเงื่อนไขที่กำหนด

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$activeUsers = User::where(‘status’, ‘active’)->get(); // ดึงผู้ใช้ที่มีสถานะเป็น active

2. first()

ใช้ในการดึงข้อมูลรายการแรกที่ตรงกับเงื่อนไขที่กำหนด

คืนค่าเป็น Model Instance หรือ null หากไม่พบข้อมูล

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$user = User::where(’email’, ‘john@example.com’)->first(); // ดึงผู้ใช้ที่มีอีเมลตรงกับที่กำหนด

3. firstOrFail()

คล้ายกับ first() แต่หากไม่พบข้อมูลจะโยนข้อผิดพลาด ModelNotFoundException

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$post = Post::where(‘slug’, ‘example-post’)->firstOrFail(); // ดึงโพสต์ที่มี slug ตรงกับที่กำหนด หรือแสดงข้อผิดพลาดหากไม่พบ

4. pluck()

ใช้ในการดึงค่าเฉพาะฟิลด์หนึ่งจากฐานข้อมูลเป็นอาร์เรย์

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$names = User::pluck(‘name’); // ดึงชื่อผู้ใช้ทั้งหมดในรูปแบบอาร์เรย์

5. orderBy()

ใช้ในการจัดเรียงข้อมูลตามคอลัมน์ที่กำหนด

ตัวอย่างการใช้งาน:php
ตัวอย่างโค้ด
$users = User::orderBy(‘created_at’, ‘desc’)->get(); // ดึงผู้ใช้เรียงตามวันที่สร้างล่าสุด

6. limit() และ take()

ใช้ในการจำกัดจำนวนข้อมูลที่ดึงออกมา

ตัวอย่างการใช้งาน:php
$recentPosts = Post::orderBy(‘created_at’, ‘desc’)->limit(5)->get(); // ดึงโพสต์ล่าสุด 5 รายการ

7. count()

ใช้ในการนับจำนวนรายการที่ตรงกับเงื่อนไขที่กำหนด

ตัวอย่างการใช้งาน:php
$userCount = User::where(‘active’, true)->count(); // นับจำนวนผู้ใช้ที่มีสถานะ active

8. exists()

ใช้ในการตรวจสอบว่ามีข้อมูลที่ตรงกับเงื่อนไขหรือไม่

ตัวอย่างการใช้งาน:php
$exists = User::where(’email’, ‘john@example.com’)->exists(); // ตรวจสอบว่ามีผู้ใช้ที่มีอีเมลนี้หรือไม่

9. doesntExist()

ใช้ในการตรวจสอบว่าไม่มีข้อมูลที่ตรงกับเงื่อนไข

ตัวอย่างการใช้งาน:php
$notExists = User::where(’email’, ‘nonexistent@example.com’)->doesntExist(); // ตรวจสอบว่าไม่มีผู้ใช้ที่มีอีเมลนี้หรือไม่

10. with()

ใช้สำหรับการดึงข้อมูลที่มีความสัมพันธ์กัน (Eager Loading) เพื่อลดจำนวนการ query

ตัวอย่างการใช้งาน:php
$posts = Post::with(‘comments’)->get(); // ดึงโพสต์ทั้งหมดพร้อมกับความคิดเห็นที่เกี่ยวข้อง

11. paginate()

ใช้ในการแบ่งหน้าข้อมูล ซึ่งช่วยให้การแสดงผลข้อมูลในแต่ละหน้าทำได้สะดวก

ตัวอย่างการใช้งาน:php
$users = User::paginate(10); // ดึงผู้ใช้ 10 รายการต่อหน้า

12. updateOrCreate()

ใช้สำหรับอัปเดตข้อมูลที่มีอยู่ หรือสร้างใหม่หากไม่มีข้อมูลที่ตรงกับเงื่อนไข

ตัวอย่างการใช้งาน:php
$user = User::updateOrCreate(

    [’email’ => ‘john@example.com’], // เงื่อนไขในการค้นหา

    [‘name’ => ‘John Doe’, ‘status’ => ‘active’] // ข้อมูลที่จะอัปเดตหรือสร้างใหม่

);

13. delete() และ destroy()

ใช้สำหรับลบข้อมูลจากฐานข้อมูล

ตัวอย่างการใช้งาน:php
$user = User::find(1);

$user->delete(); // ลบผู้ใช้ที่พบ

php
User::destroy([1, 2, 3]); // ลบผู้ใช้ที่มี id 1, 2, และ 3

การรู้จักและใช้งานเมธอดเหล่านี้ใน Laravel จะช่วยให้คุณสามารถจัดการข้อมูลได้อย่างหลากหลายและมีประสิทธิภาพยิ่งขึ้น

เขียนโปรแกรม​ ด้วย Laravel​ โดยมี crud ครบทุกแบบฟอร์ม​ โดยเป็น​ระบบแสดงตัวอย่าง​ระบบ​พนักงาน ของ​บริษัท​แห่ง​หนึ่ง​ โดยมีการแบ่งแผนก​ มีหน้าแสดง พนักงาน​ในรูปแบบ​ต่างๆ ตามที่ควรจะเป็น​ ทั้งหมด​

เพื่อให้คุณสามารถสร้างระบบแสดงตัวอย่าง CRUD ของระบบพนักงานในบริษัทที่มีการแบ่งแผนก โดยใช้ Laravel ได้ครบถ้วน ผมจะอธิบายวิธีการสร้างและโครงสร้างโปรแกรมที่คุณสามารถใช้เป็นแนวทางได้ ซึ่งจะประกอบไปด้วยการสร้างโครงสร้างฐานข้อมูล การสร้าง Model, Controller, View และการกำหนด Route ให้ครบทุกส่วน

1. สร้างโครงสร้างฐานข้อมูล

ให้เริ่มด้วยการสร้าง migration สำหรับตาราง departments และ employees เพื่อจัดเก็บข้อมูลพนักงานและแผนก:

Migration สำหรับตาราง departments:bash

ตัวอย่างโค้ด

php artisan make:migration create_departments_table

โค้ดใน create_departments_table.php:

php

ตัวอย่างโค้ด

public function up()

{

    Schema::create(‘departments’, function (Blueprint $table) {

        $table->id();

        $table->string(‘name’)->unique();

        $table->timestamps();

    });

}

Migration สำหรับตาราง employees:

bash

ตัวอย่างโค้ด

php artisan make:migration create_employees_table

โค้ดใน create_employees_table.php:

php

ตัวอย่างโค้ด

public function up()

{

    Schema::create(’employees’, function (Blueprint $table) {

        $table->id();

        $table->string(‘name’);

        $table->string(‘position’);

        $table->unsignedBigInteger(‘department_id’);

        $table->timestamps();

        $table->foreign(‘department_id’)->references(‘id’)->on(‘departments’)->onDelete(‘cascade’);

    });

}

รัน Migration:

bash

ตัวอย่างโค้ด

php artisan migrate

2. สร้าง Model สำหรับ Department และ Employee

สร้าง Model ทั้งสองเพื่อใช้จัดการข้อมูล:

Model สำหรับ Department:

bash

ตัวอย่างโค้ด

php artisan make:model Department

โค้ดใน Department.php:

php

ตัวอย่างโค้ด

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Department extends Model

{

    use HasFactory;

    protected $fillable = [‘name’];

    public function employees()

    {

        return $this->hasMany(Employee::class);

    }

}

Model สำหรับ Employee:

bash

ตัวอย่างโค้ด

php artisan make:model Employee

โค้ดใน Employee.php:

php

ตัวอย่างโค้ด

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model

{

    use HasFactory;

    protected $fillable = [‘name’, ‘position’, ‘department_id’];

    public function department()

    {

        return $this->belongsTo(Department::class);

    }

}

3. สร้าง Controller สำหรับการทำ CRUD

สร้าง Controller เพื่อจัดการกับการทำงานของระบบพนักงานและแผนก:

Controller สำหรับ Department:

bash

ตัวอย่างโค้ด

php artisan make:controller DepartmentController –resource

โค้ดใน DepartmentController.php:php

ตัวอย่างโค้ด

namespace App\Http\Controllers;

use App\Models\Department;

use Illuminate\Http\Request;

class DepartmentController extends Controller

{

    public function index()

    {

        $departments = Department::all();

        return view(‘departments.index’, compact(‘departments’));

    }

    public function create()

    {

        return view(‘departments.create’);

    }

    public function store(Request $request)

    {

        $request->validate([‘name’ => ‘required|unique:departments’]);

        Department::create($request->all());

        return redirect()->route(‘departments.index’)->with(‘success’, ‘แผนกถูกเพิ่มเรียบร้อยแล้ว’);

    }

    public function edit($id)

    {

        $department = Department::findOrFail($id);

        return view(‘departments.edit’, compact(‘department’));

    }

    public function update(Request $request, $id)

    {

        $request->validate([‘name’ => ‘required|unique:departments,name,’ . $id]);

        $department = Department::findOrFail($id);

        $department->update($request->all());

        return redirect()->route(‘departments.index’)->with(‘success’, ‘แผนกถูกแก้ไขเรียบร้อยแล้ว’);

    }

    public function destroy($id)

    {

        $department = Department::findOrFail($id);

        $department->delete();

        return redirect()->route(‘departments.index’)->with(‘success’, ‘แผนกถูกลบเรียบร้อยแล้ว’);

    }

}

Controller สำหรับ Employee:

bash

ตัวอย่างโค้ด

php artisan make:controller EmployeeController –resource

โค้ดใน EmployeeController.php:

php

ตัวอย่างโค้ด

namespace App\Http\Controllers;

use App\Models\Employee;

use App\Models\Department;

use Illuminate\Http\Request;

class EmployeeController extends Controller

{

    public function index()

    {

        $employees = Employee::with(‘department’)->get();

        return view(’employees.index’, compact(’employees’));

    }

    public function create()

    {

        $departments = Department::all();

        return view(’employees.create’, compact(‘departments’));

    }

    public function store(Request $request)

    {

        $request->validate([

            ‘name’ => ‘required’,

            ‘position’ => ‘required’,

            ‘department_id’ => ‘required|exists:departments,id’,

        ]);

        Employee::create($request->all());

        return redirect()->route(’employees.index’)->with(‘success’, ‘พนักงานถูกเพิ่มเรียบร้อยแล้ว’);

    }

    public function edit($id)

    {

        $employee = Employee::findOrFail($id);

        $departments = Department::all();

        return view(’employees.edit’, compact(’employee’, ‘departments’));

    }

    public function update(Request $request, $id)

    {

        $request->validate([

            ‘name’ => ‘required’,

            ‘position’ => ‘required’,

            ‘department_id’ => ‘required|exists:departments,id’,

        ]);

        $employee = Employee::findOrFail($id);

        $employee->update($request->all());

        return redirect()->route(’employees.index’)->with(‘success’, ‘พนักงานถูกแก้ไขเรียบร้อยแล้ว’);

    }

    public function destroy($id)

    {

        $employee = Employee::findOrFail($id);

        $employee->delete();

        return redirect()->route(’employees.index’)->with(‘success’, ‘พนักงานถูกลบเรียบร้อยแล้ว’);

    }

}

4. กำหนด Route ใน web.php

เพิ่มเส้นทางใน routes/web.php เพื่อให้ระบบทำงานได้:php

ตัวอย่างโค้ด

use App\Http\Controllers\DepartmentController;

use App\Http\Controllers\EmployeeController;

Route::resource(‘departments’, DepartmentController::class);

Route::resource(’employees’, EmployeeController::class);

5. สร้าง View Templates

สร้างไฟล์ Blade templates เช่น departments/index.blade.php, employees/index.blade.php, และไฟล์ที่เกี่ยวข้องตามที่คุณต้องการสำหรับการแสดงผลฟอร์ม CRUD และรายการข้อมูล

ตัวอย่าง employees/index.blade.php:html

ตัวอย่างโค้ด

@extends(‘layouts.app’)

@section(‘content’)

    <h1>รายชื่อพนักงาน</h1>

    <a href=”{{ route(’employees.create’) }}” class=”btn btn-primary”>เพิ่มพนักงาน</a>

    @if(session(‘success’))

        <div class=”alert alert-success”>{{ session(‘success’) }}</div>

    @endif

    <table class=”table”>

        <thead>

            <tr>

                <th>ชื่อ</th>

                <th>ตำแหน่ง</th>

                <th>แผนก</th>

                <th>การจัดการ</th>

            </tr>

        </thead>

        <tbody>

            @foreach($employees as $employee)

                <tr>

                    <td>{{ $employee->name }}</td>

                    <td>{{ $employee->position }}</td>

                    <td>{{ $employee->department->name }}</td>

                    <td>

                        <a href=”{{ route(’employees.edit’, $employee->id) }}” class=”btn btn-warning”>แก้ไข</a>

                        <form action=”{{ route(’employees.destroy’, $employee->id) }}” method=”POST” style=”display:inline;”>

                            @csrf

                            @method(‘DELETE’)

                            <button type=”submit” class=”btn btn-danger” onclick=”return confirm(‘ยืนยันการลบ?’)”>ลบ</button>

                        </form>

                    </td>

                </tr>

            @endforeach

        </tbody>

    </table>

@endsection

6. สรุป

เมื่อทำตามขั้นตอนนี้เสร็จสมบูรณ์ คุณจะได้ระบบ CRUD สำหรับพนักงานและแผนกที่มีการแสดงผลในหน้าเว็บแบบเต็มรูปแบบ คุณสามารถปรับแต่งเพิ่มเติมให้เหมาะสมกับความต้องการของระบบได้

ใน Laravel การใช้งานฟังก์ชันใน Controller สำหรับจัดการ CRUD (Create, Read, Update, Delete) จะมีการใช้พารามิเตอร์ที่ต่างกันไปตามการทำงานของแต่ละฟังก์ชัน และการจัดการเส้นทาง (Routes) ก็เชื่อมโยงกับฟังก์ชันเหล่านี้เพื่อให้การทำงานของระบบมีความสมบูรณ์ มาดูรายละเอียดและการใช้งานของแต่ละฟังก์ชันและพารามิเตอร์ใน CRUD พร้อมการเชื่อมโยงกับ Route กัน:

ฟังก์ชันและพารามิเตอร์ใน Controller สำหรับ CRUD

  1. index()
    • ใช้เพื่อแสดงรายการข้อมูลทั้งหมด
    • ไม่จำเป็นต้องใช้พารามิเตอร์
    • Route: GET /resources

ตัวอย่าง:php
public function index()

{

    $employees = Employee::all(); // ดึงข้อมูลทั้งหมดจากฐานข้อมูล

    return view(’employees.index’, compact(’employees’));

}

  1. create()
    • ใช้เพื่อแสดงฟอร์มสำหรับการสร้างข้อมูลใหม่
    • ไม่จำเป็นต้องใช้พารามิเตอร์
    • Route: GET /resources/create

ตัวอย่าง:php
public function create()

{

    $departments = Department::all(); // ดึงข้อมูลแผนกทั้งหมดเพื่อแสดงในฟอร์ม

    return view(’employees.create’, compact(‘departments’));

}

  1. store(Request $request)
    • ใช้สำหรับรับข้อมูลจากฟอร์มและบันทึกลงในฐานข้อมูล
    • พารามิเตอร์ที่ใช้คือ Request $request ซึ่งเป็นข้อมูลที่รับมาจากผู้ใช้
    • Route: POST /resources

ตัวอย่าง:php
ตัวอย่างโค้ด
public function store(Request $request)

{

    $request->validate([

        ‘name’ => ‘required’,

        ‘position’ => ‘required’,

        ‘department_id’ => ‘required|exists:departments,id’,

    ]);

    Employee::create($request->all()); // บันทึกข้อมูลลงในฐานข้อมูล

    return redirect()->route(’employees.index’)->with(‘success’, ‘พนักงานถูกเพิ่มเรียบร้อยแล้ว’);

}

  1. show($id)
    • ใช้เพื่อแสดงข้อมูลรายละเอียดของรายการเดียว
    • พารามิเตอร์ที่ใช้คือ $id เพื่อระบุว่าต้องการแสดงข้อมูลของรายการไหน
    • Route: GET /resources/{id}

ตัวอย่าง:php
public function show($id)

{

    $employee = Employee::findOrFail($id); // ค้นหาข้อมูลพนักงานตาม ID

    return view(’employees.show’, compact(’employee’));

}

  1. edit($id)
    • ใช้เพื่อแสดงฟอร์มสำหรับแก้ไขข้อมูล
    • พารามิเตอร์ที่ใช้คือ $id เพื่อระบุรายการที่ต้องการแก้ไข
    • Route: GET /resources/{id}/edit

ตัวอย่าง:php
public function edit($id)

{

    $employee = Employee::findOrFail($id); // ดึงข้อมูลพนักงานที่ต้องการแก้ไข

    $departments = Department::all(); // ดึงข้อมูลแผนกทั้งหมด

    return view(’employees.edit’, compact(’employee’, ‘departments’));

}

  1. update(Request $request, $id)
    • ใช้เพื่ออัปเดตข้อมูลในฐานข้อมูล
    • พารามิเตอร์ที่ใช้คือ Request $request เพื่อรับข้อมูลจากผู้ใช้ และ $id เพื่อระบุรายการที่ต้องการอัปเดต
    • Route: PUT/PATCH /resources/{id}

ตัวอย่าง:php
public function update(Request $request, $id)

{

    $request->validate([

        ‘name’ => ‘required’,

        ‘position’ => ‘required’,

        ‘department_id’ => ‘required|exists:departments,id’,

    ]);

    $employee = Employee::findOrFail($id);

    $employee->update($request->all()); // อัปเดตข้อมูล

    return redirect()->route(’employees.index’)->with(‘success’, ‘พนักงานถูกแก้ไขเรียบร้อยแล้ว’);

}

  1. destroy($id)
    • ใช้เพื่อลบข้อมูลออกจากฐานข้อมูล
    • พารามิเตอร์ที่ใช้คือ $id เพื่อระบุรายการที่ต้องการลบ
    • Route: DELETE /resources/{id}

ตัวอย่าง:php
public function destroy($id)

{

    $employee = Employee::findOrFail($id);

    $employee->delete(); // ลบข้อมูล

    return redirect()->route(’employees.index’)->with(‘success’, ‘พนักงานถูกลบเรียบร้อยแล้ว’);

}

การเชื่อมโยงกับ Route

ใน Laravel สามารถใช้ Route::resource() เพื่อสร้าง Route ทั้งหมดสำหรับ CRUD ได้ง่าย ๆ:php

Route::resource(’employees’, EmployeeController::class);

คำสั่งนี้จะสร้าง Route ดังนี้:

  • GET /employees → index()
  • GET /employees/create → create()
  • POST /employees → store()
  • GET /employees/{id} → show()
  • GET /employees/{id}/edit → edit()
  • PUT/PATCH /employees/{id} → update()
  • DELETE /employees/{id} → destroy()

สรุป:

พารามิเตอร์ที่ใช้:

Request $request: สำหรับรับข้อมูลที่ส่งมาจากผู้ใช้

$id: สำหรับระบุข้อมูลที่ต้องการดึง แก้ไข หรือลบ

Route: ใช้ Route::resource() เพื่อสร้าง Route สำหรับ CRUD ทั้งหมดใน Controller ได้อย่างสะดวกและรวดเร็ว

การสร้างระบบจัดการพนักงานที่มีการทำงาน CRUD โดยใช้ AJAX และ Bootstrap จะช่วยให้ระบบมีการตอบสนองที่รวดเร็วและไม่ต้องรีเฟรชหน้าเว็บเมื่อทำการเพิ่ม ลบ แก้ไข หรือแสดงข้อมูล ด้านล่างนี้เป็นขั้นตอนการสร้างระบบนี้ด้วย Laravel, AJAX และ Bootstrap:

1. การตั้งค่าโครงสร้างฐานข้อมูล

สร้าง migration สำหรับตาราง employees:bash

php artisan make:migration create_employees_table

โค้ดใน create_employees_table.php:php

public function up()

{

    Schema::create(’employees’, function (Blueprint $table) {

        $table->id();

        $table->string(‘name’);

        $table->string(‘position’);

        $table->string(‘department’);

        $table->timestamps();

    });

}

รันคำสั่งนี้เพื่อสร้างตารางในฐานข้อมูล:bash

php artisan migrate

2. การสร้าง Model

สร้าง Model สำหรับ Employee:bash

php artisan make:model Employee

โค้ดใน Employee.php:php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model

{

    use HasFactory;

    protected $fillable = [‘name’, ‘position’, ‘department’];

}

3. การสร้าง Controller

สร้าง Controller สำหรับจัดการการทำงานของระบบ:bash

php artisan make:controller EmployeeController

โค้ดใน EmployeeController.php:php

namespace App\Http\Controllers;

use App\Models\Employee;

use Illuminate\Http\Request;

class EmployeeController extends Controller

{

    public function index()

    {

        return view(’employees.index’);

    }

    public function getEmployees()

    {

        $employees = Employee::all();

        return response()->json($employees);

    }

    public function store(Request $request)

    {

        $employee = Employee::create($request->all());

        return response()->json($employee);

    }

    public function show($id)

    {

        $employee = Employee::findOrFail($id);

        return response()->json($employee);

    }

    public function update(Request $request, $id)

    {

        $employee = Employee::findOrFail($id);

        $employee->update($request->all());

        return response()->json($employee);

    }

    public function destroy($id)

    {

        $employee = Employee::findOrFail($id);

        $employee->delete();

        return response()->json([‘success’ => true]);

    }

}

4. กำหนด Route ใน web.php

เพิ่ม Route สำหรับระบบพนักงาน:php

use App\Http\Controllers\EmployeeController;

Route::get(‘/employees’, [EmployeeController::class, ‘index’]);

Route::get(‘/get-employees’, [EmployeeController::class, ‘getEmployees’]);

Route::post(‘/employees’, [EmployeeController::class, ‘store’]);

Route::get(‘/employees/{id}’, [EmployeeController::class, ‘show’]);

Route::put(‘/employees/{id}’, [EmployeeController::class, ‘update’]);

Route::delete(‘/employees/{id}’, [EmployeeController::class, ‘destroy’]);

5. สร้าง View และการใช้ Bootstrap กับ AJAX

สร้างไฟล์ index.blade.php ในโฟลเดอร์ resources/views/employees:

โค้ดใน index.blade.php:html

@extends(‘layouts.app’)

@section(‘content’)

<div class=”container mt-4″>

    <h1 class=”mb-4″>ระบบจัดการพนักงาน</h1>

    <button class=”btn btn-primary mb-3″ data-bs-toggle=”modal” data-bs-target=”#employeeModal”>เพิ่มพนักงาน</button>

    <table class=”table table-bordered”>

        <thead>

            <tr>

                <th>ชื่อ</th>

                <th>ตำแหน่ง</th>

                <th>แผนก</th>

                <th>การจัดการ</th>

            </tr>

        </thead>

        <tbody id=”employeeTableBody”></tbody>

    </table>

</div>

<!– Modal Form –>

<div class=”modal fade” id=”employeeModal” tabindex=”-1″ aria-labelledby=”employeeModalLabel” aria-hidden=”true”>

    <div class=”modal-dialog”>

        <div class=”modal-content”>

            <div class=”modal-header”>

                <h5 class=”modal-title” id=”employeeModalLabel”>เพิ่ม/แก้ไขพนักงาน</h5>

                <button type=”button” class=”btn-close” data-bs-dismiss=”modal” aria-label=”Close”></button>

            </div>

            <div class=”modal-body”>

                <form id=”employeeForm”>

                    <input type=”hidden” id=”employeeId”>

                    <div class=”mb-3″>

                        <label for=”name” class=”form-label”>ชื่อ</label>

                        <input type=”text” class=”form-control” id=”name” required>

                    </div>

                    <div class=”mb-3″>

                        <label for=”position” class=”form-label”>ตำแหน่ง</label>

                        <input type=”text” class=”form-control” id=”position” required>

                    </div>

                    <div class=”mb-3″>

                        <label for=”department” class=”form-label”>แผนก</label>

                        <input type=”text” class=”form-control” id=”department” required>

                    </div>

                    <button type=”submit” class=”btn btn-primary”>บันทึก</button>

                </form>

            </div>

        </div>

    </div>

</div>

<script>

document.addEventListener(‘DOMContentLoaded’, function () {

    fetchEmployees();

    function fetchEmployees() {

        fetch(‘/get-employees’)

            .then(response => response.json())

            .then(data => {

                let tableBody = ”;

                data.forEach(employee => {

                    tableBody += `

                        <tr>

                            <td>${employee.name}</td>

                            <td>${employee.position}</td>

                            <td>${employee.department}</td>

                            <td>

                                <button class=”btn btn-warning btn-sm” onclick=”editEmployee(${employee.id})”>แก้ไข</button>

                                <button class=”btn btn-danger btn-sm” onclick=”deleteEmployee(${employee.id})”>ลบ</button>

                            </td>

                        </tr>

                    `;

                });

                document.getElementById(’employeeTableBody’).innerHTML = tableBody;

            });

    }

    document.getElementById(’employeeForm’).addEventListener(‘submit’, function (e) {

        e.preventDefault();

        const id = document.getElementById(’employeeId’).value;

        const name = document.getElementById(‘name’).value;

        const position = document.getElementById(‘position’).value;

        const department = document.getElementById(‘department’).value;

        const data = { name, position, department };

        let url = ‘/employees’;

        let method = ‘POST’;

        if (id) {

            url = `/employees/${id}`;

            method = ‘PUT’;

        }

        fetch(url, {

            method: method,

            headers: {

                ‘Content-Type’: ‘application/json’,

                ‘X-CSRF-TOKEN’: document.querySelector(‘meta[name=”csrf-token”]’).getAttribute(‘content’)

            },

            body: JSON.stringify(data)

        })

        .then(response => response.json())

        .then(() => {

            fetchEmployees();

            document.getElementById(’employeeForm’).reset();

            document.getElementById(’employeeId’).value = ”;

            new bootstrap.Modal(document.getElementById(’employeeModal’)).hide();

        });

    });

    window.editEmployee = function (id) {

        fetch(`/employees/${id}`)

            .then(response => response.json())

            .then(employee => {

                document.getElementById(’employeeId’).value = employee.id;

                document.getElementById(‘name’).value = employee.name;

                document.getElementById(‘position’).value = employee.position;

                document.getElementById(‘department’).value = employee.department;

                new bootstrap.Modal(document.getElementById(’employeeModal’)).show();

            });

    };

    window.deleteEmployee = function (id) {

        if (confirm(‘คุณต้องการลบข้อมูลพนักงานนี้หรือไม่?’)) {

            fetch(`/employees/${id}`, {

                method: ‘DELETE’,

                headers: {

                    ‘X-CSRF-TOKEN’: document.querySelector(‘meta[name=”csrf-token”]’).getAttribute(‘content’)

                }

            })

            .then(() => {

                fetchEmployees();

            });

        }

    };

});

</script>

@endsection

6. สรุป

  • ใช้ AJAX ในการส่งและรับข้อมูลระหว่างฟรอนต์เอนด์และแบ็กเอนด์
  • ใช้ Bootstrap ในการสร้างฟอร์มและ UI ที่สวยงาม
  • ใช้ Laravel ในการสร้าง API เพื่อให้ข้อมูลในระบบสามารถส่งกลับเป็น JSON ได้

โค้ดนี้จะช่วยให้คุณมีระบบ CRUD สำหรับพนักงานที่มีการตอบสนองแบบทันทีโดยไม่ต้องรีเฟรชหน้าเว็บ

การสร้างระบบจัดการพนักงานโดยใช้ AJAX และ Bootstrap ใน Laravel มีหลายขั้นตอนที่ต้องทำความเข้าใจเพื่อให้ได้ระบบที่มีประสิทธิภาพและทำงานได้สมบูรณ์ ด้านล่างนี้เป็นขั้นตอนการเขียนทั้งหมด ข้อควรจำ และสิ่งสำคัญที่ควรรู้ในการพัฒนา:

ขั้นตอนที่ 1: สร้างโปรเจกต์ Laravel

สร้างโปรเจกต์ Laravel ใหม่ (หากยังไม่มี):bash

composer create-project laravel/laravel employee-management

cd employee-management

ตั้งค่าไฟล์ .env เพื่อเชื่อมต่อกับฐานข้อมูล: env
DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=employee_management

DB_USERNAME=your_username

DB_PASSWORD=your_password

ขั้นตอนที่ 2: สร้างฐานข้อมูล

  1. สร้างฐานข้อมูลใน MySQL โดยใช้คำสั่ง SQL หรือเครื่องมือจัดการฐานข้อมูล (เช่น phpMyAdmin) ให้ชื่อฐานข้อมูลตรงกับที่ตั้งในไฟล์ .env

รันคำสั่งต่อไปนี้เพื่อทำให้ Laravel จัดการฐานข้อมูล:
bash
php artisan migrate

ขั้นตอนที่ 3: สร้าง Migration และ Model

สร้าง Migration สำหรับตารางพนักงาน:
bash
php artisan make:migration create_employees_table

เขียนโค้ดในไฟล์ create_employees_table.php:
php
public function up()

{

    Schema::create(’employees’, function (Blueprint $table) {

        $table->id();

        $table->string(‘name’);

        $table->string(‘position’);

        $table->string(‘department’);

        $table->timestamps();

    });

}

รัน Migration:
bash
php artisan migrate

สร้าง Model สำหรับ Employee:
bash
php artisan make:model Employee

แก้ไข Employee.php:
php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model

{

    use HasFactory;

    protected $fillable = [‘name’, ‘position’, ‘department’];

}

ขั้นตอนที่ 4: สร้าง Controller

สร้าง Controller สำหรับจัดการ CRUD:
bash
php artisan make:controller EmployeeController

เขียนโค้ดใน EmployeeController.php:
php
namespace App\Http\Controllers;

use App\Models\Employee;

use Illuminate\Http\Request;

class EmployeeController extends Controller

{

    public function index()

    {

        return view(’employees.index’);

    }

    public function getEmployees()

    {

        $employees = Employee::all();

        return response()->json($employees);

    }

    public function store(Request $request)

    {

        $employee = Employee::create($request->all());

        return response()->json($employee);

    }

    public function show($id)

    {

        $employee = Employee::findOrFail($id);

        return response()->json($employee);

    }

    public function update(Request $request, $id)

    {

        $employee = Employee::findOrFail($id);

        $employee->update($request->all());

        return response()->json($employee);

    }

    public function destroy($id)

    {

        $employee = Employee::findOrFail($id);

        $employee->delete();

        return response()->json([‘success’ => true]);

    }

}

ขั้นตอนที่ 5: กำหนด Route ใน web.php

เพิ่ม Route สำหรับการทำงานของระบบ:

php

use App\Http\Controllers\EmployeeController;

Route::get(‘/employees’, [EmployeeController::class, ‘index’]);

Route::get(‘/get-employees’, [EmployeeController::class, ‘getEmployees’]);

Route::post(‘/employees’, [EmployeeController::class, ‘store’]);

Route::get(‘/employees/{id}’, [EmployeeController::class, ‘show’]);

Route::put(‘/employees/{id}’, [EmployeeController::class, ‘update’]);

Route::delete(‘/employees/{id}’, [EmployeeController::class, ‘destroy’]);

ขั้นตอนที่ 6: สร้าง View

สร้างไฟล์ index.blade.php ใน resources/views/employees:

ตัวอย่างโค้ดใน index.blade.php:

html

@extends(‘layouts.app’)

@section(‘content’)

<div class=”container mt-4″>

    <h1>ระบบจัดการพนักงาน</h1>

    <button class=”btn btn-primary mb-3″ data-bs-toggle=”modal” data-bs-target=”#employeeModal”>เพิ่มพนักงาน</button>

    <table class=”table table-bordered”>

        <thead>

            <tr>

                <th>ชื่อ</th>

                <th>ตำแหน่ง</th>

                <th>แผนก</th>

                <th>การจัดการ</th>

            </tr>

        </thead>

        <tbody id=”employeeTableBody”></tbody>

    </table>

</div>

<!– Modal Form –>

<div class=”modal fade” id=”employeeModal” tabindex=”-1″ aria-labelledby=”employeeModalLabel” aria-hidden=”true”>

    <div class=”modal-dialog”>

        <div class=”modal-content”>

            <div class=”modal-header”>

                <h5 class=”modal-title” id=”employeeModalLabel”>เพิ่ม/แก้ไขพนักงาน</h5>

                <button type=”button” class=”btn-close” data-bs-dismiss=”modal” aria-label=”Close”></button>

            </div>

            <div class=”modal-body”>

                <form id=”employeeForm”>

                    <input type=”hidden” id=”employeeId”>

                    <div class=”mb-3″>

                        <label for=”name” class=”form-label”>ชื่อ</label>

                        <input type=”text” class=”form-control” id=”name” required>

                    </div>

                    <div class=”mb-3″>

                        <label for=”position” class=”form-label”>ตำแหน่ง</label>

                        <input type=”text” class=”form-control” id=”position” required>

                    </div>

                    <div class=”mb-3″>

                        <label for=”department” class=”form-label”>แผนก</label>

                        <input type=”text” class=”form-control” id=”department” required>

                    </div>

                    <button type=”submit” class=”btn btn-primary”>บันทึก</button>

                </form>

            </div>

        </div>

    </div>

</div>

<script>

document.addEventListener(‘DOMContentLoaded’, function () {

    fetchEmployees();

    function fetchEmployees() {

        fetch(‘/get-employees’)

            .then(response => response.json())

            .then(data => {

                let tableBody = ”;

                data.forEach(employee => {

                    tableBody += `

                        <tr>

                            <td>${employee.name}</td>

                            <td>${employee.position}</td>

                            <td>${employee.department}</td>

                            <td>

                                <button class=”btn btn-warning btn-sm” onclick=”editEmployee(${employee.id})”>แก้ไข</button>

                                <button class=”btn btn-danger btn-sm” onclick=”deleteEmployee(${employee.id})”>ลบ</button>

                            </td>

                        </tr>

                    `;

                });

                document.getElementById(’employeeTableBody’).innerHTML = tableBody;

            });

    }

    document.getElementById(’employeeForm’).addEventListener(‘submit’, function (e) {

        e.preventDefault();

        const id = document.getElementById(’employeeId’).value;

        const name = document.getElementById(‘name’).value;

        const position = document.getElementById(‘position’).value;

        const department = document.getElementById(‘department’).value;

        const data = { name, position, department };

        let url = ‘/employees’;

        let method = ‘POST’;

        if (id) {

            url = `/employees/${id}`;

            method = ‘PUT’;

        }

        fetch(url, {

            method: method,

            headers: {

                ‘Content-Type’: ‘application/json’,

                ‘X-CSRF-TOKEN’: document.querySelector(‘meta[name=”csrf-token”]’).getAttribute(‘content’)

            },

            body: JSON.stringify(data)

        })

        .then(response => response.json())

        .then(() => {

            fetchEmployees();

            document.getElementById(’employeeForm’).reset();

            document.getElementById(’employeeId’).value = ”;

            new bootstrap.Modal(document.getElementById(’employeeModal’)).hide();

        });

    });

    window.editEmployee = function (id) {

        fetch(`/employees/${id}`)

            .then(response => response.json())

            .then(employee => {

                document.getElementById(’employeeId’).value = employee.id;

                document.getElementById(‘name’).value = employee.name;

                document.getElementById(‘position’).value = employee.position;

                document.getElementById(‘department’).value = employee.department;

                new bootstrap.Modal(document.getElementById(’employeeModal’)).show();

            });

    };

    window.deleteEmployee = function (id) {

        if (confirm(‘คุณต้องการลบข้อมูลพนักงานนี้หรือไม่?’)) {

            fetch(`/employees/${id}`, {

           method: ‘DELETE’,

            headers: {

                ‘X-CSRF-TOKEN’: document.querySelector(‘meta[name=”csrf-token”]’).getAttribute(‘content’)

            }

        })

        .then(() => {

            fetchEmployees(); // อัปเดตตารางข้อมูลหลังการลบ

        });

        }

    };

});

</script>

@endsection

ข้อควรจำและสิ่งสำคัญ:

  1. ความปลอดภัยของ CSRF Token: เมื่อใช้ AJAX ในการส่งคำขอ POST, PUT, และ DELETE จำเป็นต้องส่ง CSRF Token เพื่อป้องกันการโจมตีแบบ Cross-Site Request Forgery (CSRF) Laravel จะมี @csrf ในฟอร์ม และใน AJAX ต้องดึงค่า meta เพื่อส่งไปใน Header
  2. การตรวจสอบข้อผิดพลาด: ควรเพิ่มการจัดการข้อผิดพลาดในฟังก์ชัน AJAX เช่นการเช็คสถานะคำขอ (.catch ใน JavaScript) เพื่อแสดงข้อความแจ้งเตือนหากเกิดปัญหา
  3. การใช้ Modal ของ Bootstrap: ควรตรวจสอบว่า Modal ถูกเรียกใช้งานอย่างถูกต้องและรีเซ็ตข้อมูลเมื่อปิด Modal เพื่อป้องกันปัญหาข้อมูลเก่าค้างอยู่ในฟอร์ม
  4. การใช้งาน AJAX อย่างเหมาะสม: AJAX ช่วยให้ไม่ต้องรีเฟรชหน้าเว็บเมื่อทำการเปลี่ยนแปลงข้อมูล ซึ่งทำให้ประสบการณ์ผู้ใช้ดีขึ้น แต่ต้องระวังการส่งคำขอบ่อยเกินไปที่อาจทำให้เซิร์ฟเวอร์ทำงานหนัก
  5. โครงสร้างการจัดการใน Controller: ตรวจสอบให้แน่ใจว่ามีการ validate ข้อมูลในฟังก์ชัน store() และ update() เพื่อป้องกันข้อมูลที่ไม่ถูกต้องเข้าสู่ระบบ
  6. UI/UX: ใช้ Bootstrap เพื่อให้ฟอร์มและปุ่มต่าง ๆ มีการจัดรูปแบบที่สวยงามและสอดคล้องกัน เช่นการใช้ btn-primary, btn-warning, และ btn-danger เพื่อสื่อความหมายของปุ่มแต่ละประเภท
  7. การทดสอบ: หลังจากพัฒนาเสร็จ ควรทดสอบการทำงานของทุกฟังก์ชัน เช่น การเพิ่ม ลบ แก้ไข และการแสดงข้อมูลว่าทำงานได้อย่างถูกต้อง โดยไม่เกิดปัญหาใด ๆ

ด้วยการทำตามขั้นตอนและข้อควรจำที่ได้กล่าวมานี้ คุณจะสามารถสร้างระบบจัดการพนักงานที่ทำงานแบบ AJAX และใช้ Bootstrap สำหรับส่วนติดต่อผู้ใช้ได้อย่างมีประสิทธิภาพและมีประสบการณ์การใช้งานที่ดีขึ้นสำหรับผู้ใช้

Loading

Rate this post

Tags: