Workshop นี้เป็นส่วนหนึ่งของคอร์ส สอนทำระบบแจ้งซ่อมออนไลน์ Laravel
คอร์สเรียนออนไลน์ สอนทำระบบแจ้งซ่อม ราคา 999 บาท จะได้ Template ตั้งต้น สอนทำเต็มระบบ
- ขั้นตอนแรก ขอแนะนำ Laravel Excel จะใช้เป็นของ https://laravel-excel.com/
- ทำการติดตั้ง composer require maatwebsite/excel:^3.1
- composer update
- ** ถ้ายังลงไม่ได้ให้ไปแก้ extension=gd
- php artisan make:export Export
- RepairsExport.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<?php namespace App\Exports; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; use Carbon\Carbon; class RepairsExport implements FromCollection, WithHeadings { protected $data; public function __construct($data) { $this->data = $data; } public function collection() { // เปลี่ยนรูปแบบข้อมูลให้ตรงกับฟิลด์ที่ต้องการใน Excel return $this->data->map(function ($item) { return [ 'id' => $item->id, 'eq_name' => $item->eq_name, 'r_name' => $item->r_name, 'r_serialnumber' => $item->r_serialnumber, 'full_name' => $item->firstname . ' ' . $item->lastname, 'building_info' => $item->build_name . ' ชั้น ' . $item->floor . ' ห้อง ' . $item->room, 'r_date' => $item->r_date ? Carbon::parse($item->r_date)->format('d/m/Y') : 'ไม่ระบุ', 's_status' => $item->s_status, ]; }); } public function headings(): array { return [ 'ID', 'ประเภทอุปกรณ์', 'ชื่ออุปกรณ์', 'หมายเลขเครื่อง', 'ผู้แจ้งซ่อม', 'สถานที่แจ้งซ่อม', 'วันที่แจ้งซ่อม', 'สถานะ' ]; } } |
- export.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
@extends('layouts.master') @section('title') @lang('Repair') @endsection @section('content') @component('common-components.breadcrumb') @slot('pagetitle') Manager @endslot @slot('title') Export Data @endslot @endcomponent <div class="row"> <div class="col-lg-12"> <div class="card"> <div class="card-body"> <div class="row mb-2"> <div class="col-md-6"> <a href="{{ url('managers/export/pdf') }}" target="_blank" class="btn btn-info me-2"> <i class="mdi mdi-file-pdf-outline"></i> Export PDF </a> <a href="{{ url('managers/export/excel') }}" class="btn btn-success me-2"> <i class="mdi mdi-file-excel-outline"></i> Export Excel </a> </div> <div class="col-md-6"> <!-- Search bar removed --> </div> </div> <!-- end row --> <div class="table-responsive mb-4"> <table class="table table-centered table-nowrap mb-0" id="userTable"> <thead> <tr> <th scope="col" style="width: 5%;">ID</th> <th scope="col" style="width: 10%;">ประเภทอุปกรณ์</th> <th scope="col" style="width: 10%;">ชื่ออุปกรณ์</th> <th scope="col" style="width: 10%;">หมายเลขเครื่อง</th> <th scope="col" style="width: 20%;">ผู้แจ้งซ่อม</th> <th scope="col" style="width: 20%;">สถานที่แจ้งซ่อม</th> <th scope="col" style="width: 10%;">วันที่แจ้งซ่อม</th> <th scope="col" style="width: 10%;">สถานะ</th> </tr> </thead> @foreach($data as $item) <tr> <td>{{ $item->id }}</td> <td>{{ $item->eq_name }}</td> <td>{{ $item->r_name }}</td> <td>{{ $item->r_serialnumber }}</td> <td>{{ $item->firstname }} {{ $item->lastname }}</td> <td>{{ $item->build_name }} ชั้น {{ $item->floor }} ห้อง {{ $item->room }}</td> <td>{{ $item->r_date ? \Carbon\Carbon::parse($item->r_date)->format('d/m/Y') : 'ไม่ระบุ' }}</td> <td>{{ $item->s_status }}</td> </tr> @endforeach </table> </div> {!! $data->links('layouts.pagination') !!} </div> </div> </div> </div> @section('script') <script> </script> @endsection @endsection |
- ManagerController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
public function export_list() { $query = Repair::select( 'repair.*', 'users.firstname', 'users.lastname', 'equipment.eq_name', 'building.build_name', 'status.s_status' ) ->join('users', 'repair.u_id', '=', 'users.id') ->join('equipment', 'repair.eq_id', '=', 'equipment.id') ->join('building', 'repair.build_id', '=', 'building.id') ->join('status', 'repair.s_id', '=', 'status.id') ->orderBy('repair.id', 'DESC'); $data = $query->paginate(10); return view('managers/export', compact('data')); } public function export_pdf() { $data = Repair::select( 'repair.*', 'users.firstname', 'users.lastname', 'equipment.eq_name', 'building.build_name', 'status.s_status' ) ->join('users', 'repair.u_id', '=', 'users.id') ->join('equipment', 'repair.eq_id', '=', 'equipment.id') ->join('building', 'repair.build_id', '=', 'building.id') ->join('status', 'repair.s_id', '=', 'status.id') ->orderBy('repair.id', 'DESC') ->get(); $html = view('managers.pdf', compact('data'))->render(); $mpdf = new \Mpdf\Mpdf([ 'default_font' => 'th-sarabun', 'mode' => 'utf-8' ]); $mpdf->WriteHTML($html); $mpdf->Output('repair_data.pdf', 'I'); } public function export_excel() { $query = Repair::select( 'repair.id', 'equipment.eq_name', 'repair.r_name', 'repair.r_serialnumber', 'users.firstname', 'users.lastname', 'building.build_name', 'repair.floor', 'repair.room', 'repair.r_date', 'status.s_status' ) ->join('users', 'repair.u_id', '=', 'users.id') ->join('equipment', 'repair.eq_id', '=', 'equipment.id') ->join('building', 'repair.build_id', '=', 'building.id') ->join('status', 'repair.s_id', '=', 'status.id') ->orderBy('repair.id', 'DESC'); // ใช้ get() เพื่อดึงข้อมูลทั้งหมด $data = $query->get(); return Excel::download(new RepairsExport($data), 'export_excel.xlsx'); } |
- การทำ Export PDF โดยใช้ mPDF
- composer require mpdf/mpdf
- pdf.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Export PDF </title> <style> body { font-family: 'th-sarabun', sans-serif; } table { width: 100%; border-collapse: collapse; } table, th, td { border: 1px solid black; } th, td { padding: 8px; text-align: left; } </style> </head> <body> <h2>Repair Data</h2> <table> <thead> <tr> <th>Repair ID</th> <th>Equipment Name</th> <th>Repair Name</th> <th>Serial Number</th> <th>Full Name</th> <th>Building Info</th> <th>Repair Date</th> <th>Status</th> </tr> </thead> <tbody> @foreach($data as $item) <tr> <td>{{ $item->id }}</td> <td>{{ $item->eq_name }}</td> <td>{{ $item->r_name }}</td> <td>{{ $item->r_serialnumber }}</td> <td>{{ $item->firstname }} {{ $item->lastname }}</td> <td>{{ $item->build_name }} floor {{ $item->floor }} room {{ $item->room }}</td> <td>{{ $item->r_date ? \Carbon\Carbon::parse($item->r_date)->format('d/m/Y') : 'ไม่ระบุ' }}</td> <td>{{ $item->s_status }}</td> </tr> @endforeach </tbody> </table> </body> </html> |
สนใจจ้างพัฒนาระบบ เขียนระบบ
ทำเว็บไซต์ รับสอนเขียนโปรแกรม
inbox มาที่เพจ หรือติดต่อ 098-373-8651
ช่องทางการชำระเงิน
เงินสด หรือ e-banking
ธนาคารกสิกรไทย
เลขบัญชี : 0951168564
ชื่อบัญชี : นายวัยวุฒิ ชุมเมืองปัก