Hoang Tran

Hoang Tran

1656718320

Cách Xuất Cơ Sở Dữ Liệu MySQL Ở Định Dạng CSV & Excel Trong Laravel 8

Trong Laravel, bạn không cần phải viết mã dài để xuất dữ liệu của mình, đã có một gói có sẵn cho việc đó - Laravel Excel.

Nó cho phép xuất dữ liệu ở nhiều định dạng khác nhau như - XLSX, CSV, XLS, HTML, v.v.

Trong hướng dẫn này, tôi chỉ cách bạn có thể xuất dữ liệu cơ sở dữ liệu MySQL ở định dạng CSV & Excel bằng cách sử dụng gói Laravel Excel trong Laravel 8.


1. Cài đặt gói

Yêu cầu -

  • PHP: ^7.2\|^8.0
  • Laravel: ^5.8
  • PhpS Spreadsheet: ^1.21
  • psr / simple-cache: ^1.0
  • php_zip Đã bật tiện ích mở rộng PHP 
  • php_xml Đã bật tiện ích mở rộng PHP 
  • php_gd2 Đã bật tiện ích mở rộng PHP 
  • php_iconv Đã bật tiện ích mở rộng PHP 
  • php_simplexml Đã bật tiện ích mở rộng PHP 
  • php_xmlreader Đã bật tiện ích mở rộng PHP 
  • php_zlib Đã bật tiện ích mở rộng PHP 

Cài đặt gói bằng trình soạn nhạc -

composer require maatwebsite/excel

Nếu bạn gặp lỗi khi thực hiện lệnh trên, hãy thực hiện lệnh dưới đây:

composer require psr/simple-cache:^1.0 maatwebsite/excel

Sau đó, một lần nữa thực thi -

composer require maatwebsite/excel

2. Cập nhật app.php

  • Mở  config/app.php tệp.
  • Thêm phần sau Maatwebsite\Excel\ExcelServiceProvider::class vào  'providers' -
'providers' => [
      ....
      ....
      ....  
      Maatwebsite\Excel\ExcelServiceProvider::class
];
  • Thêm phần sau  'Excel' => Maatwebsite\Excel\Facades\Excel::class vào  'aliases' -
'aliases' => [
     .... 
     .... 
     .... 
     'Excel' => Maatwebsite\Excel\Facades\Excel::class
];

3. Xuất bản gói

Chạy lệnh -

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

Điều này sẽ tạo một excel.phptệp mới trong config/.


4. Cấu hình cơ sở dữ liệu

Mở .envtệp.

Chỉ định máy chủ, tên cơ sở dữ liệu, tên người dùng và mật khẩu.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tutorial
DB_USERNAME=root
DB_PASSWORD=

5. Tạo bảng

  • Tạo một bảng mới Employeesbằng cách sử dụng di chuyển và thêm một số bản ghi.
php artisan make:migration create_employees_table
  • Bây giờ, điều hướng đến database/migrations/thư mục từ thư mục gốc của dự án.
  • Tìm một tệp PHP có kết thúc bằng create_employees_tablevà mở nó.
  • Xác định cấu trúc bảng trong up()phương thức.
public function up()
{
    Schema::create('employees', function (Blueprint $table) {
        $table->id();
        $table->string('username');
        $table->string('name');
        $table->string('email');
        $table->smallInteger('age');
        $table->timestamps();
    });
}
  • Chạy quá trình di chuyển -
php artisan migrate
  • Bảng được tạo và thêm một số bản ghi trong đó.

6. Mô hình

  • Tạo Employeesmô hình.
php artisan make:model Employees
  • Mở  app/Models/Employees.php tệp.
  • Chỉ định các thuộc tính Model có thể gán hàng loạt - tên người dùng, tên, email và tuổi bằng cách sử dụng thuộc $fillabletính.

Mã đã hoàn thành

<?php

namespace App\Models;

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

class Employees extends Model
{
    use HasFactory;

    protected $fillable = [
       'username','name','email','age'
    ];
}

7. Tạo lớp Xuất

Tôi đang tạo 2 lớp xuất chỉ cho mục đích ví dụ -

1. Lớp Nhân viên Xuất khẩu -

php artisan make:export EmployeesExport --model=Employees
  • Mở  app/Exports/EmployeesExport.php tệp.

Lớp có 2 phương thức -

  • collection () - Tải dữ liệu xuất. Ở đây, bạn có thể -
    • Trả lại tất cả hồ sơ.
    • Trả lại các cột cụ thể hoặc sửa đổi phản hồi trả lại mà tôi đã thực hiện trong lớp Xuất tiếp theo.
  • headings () - Chỉ định hàng tiêu đề.

LƯU Ý - Loại bỏ các phương thức headings () nếu bạn không muốn thêm một hàng tiêu đề.

Mã đã hoàn thành

<?php

namespace App\Exports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class EmployeesExport implements FromCollection, WithHeadings
{

    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        ## 1. Export all data
        // return Employees::all();

        ## 2. Export specific columns
        return Employees::select('id','username','name')->get();

    }

    public function headings(): array
    {
        return [
          '#',
          'Username',
          'Name'
        ];
    }
}

2. Lớp Nhân viênByAgeExport -

php artisan make:export EmployeesByAgeExport --model=Employees
  • Mở  app/Exports/EmployeesByAgeExport.php tệp.
  • Trong lớp này, tôi đã thêm __construct()để cho phép gửi một tham số trong khi tạo cá thể lớp và sử dụng nó để truy xuất dữ liệu.
  • Sau khi khởi tạo $resultArray , hãy trả $resultvề collect()-return collect($result);
  • Đề cập đến tên hàng tiêu đề trong heading()phương thức.

Mã đã hoàn thành

<?php

namespace App\Exports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class EmployeesByAgeExport implements FromCollection, WithHeadings
{
    private $agegreaterthan;

    public function __construct($age=0) 
    {
        $this->agegreaterthan = $age;
    }

    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        ## 3. Conditional export and customize result
        $records = Employees::select('*')->where('age','>',$this->agegreaterthan)->get();

        $result = array();
        foreach($records as $record){
           $result[] = array(
              'id'=>$record->id,
              'username' => $record->username,
              'name' => $record->name,
              'email' => $record->email,
              'age' => $record->age,
              'status' => 1 // Custom data
           );
        }

        return collect($result);
    }

    public function headings(): array
    {
       return [
         '#',
         'Username',
         'Name',
         'Email',
         'Age',
         'Status'
       ];
    }
}

8. Lộ trình

  • Mở  routes/web.php tệp.
  • Xác định 4 tuyến đường -
    • / -  Tải chế độ xem chỉ mục.
    • nhân viên / exportcsv - Xuất dữ liệu ở định dạng CSV.
    • nhân viên / exportexcel - Xuất dữ liệu ở định dạng Excel.
    • nhân viên / exportbyagecsv - ĐĂNG lộ trình xuất dữ liệu theo độ tuổi.

Mã đã hoàn thành

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EmployeesController;

Route::get('/', [EmployeesController::class, 'index'])->name('home'); 
Route::get('employees/exportcsv', [EmployeesController::class, 'exportCSV'])->name('employees.exportcsv');
Route::get('employees/exportexcel', [EmployeesController::class, 'exportExcel'])->name('employees.exportexcel');
Route::post('employees/exportbyagecsv', [EmployeesController::class, 'exportByAgeCSV'])->name('employees.exportbyagecsv');

9. Bộ điều khiển

  • Tạo  EmployeesController Bộ điều khiển.
php artisan make:controller EmployeesController
  • Mở  app/Http/Controllers/EmployeesController.php tệp.
  • Nhập và . EmployeesExportEmployeesByAgeExportExcel
  • Tạo 4 phương pháp -
    • index () - Tải indexchế độ xem.
    • exportCSV () -  Để xuất lệnh gọi dữ liệu Excel::download().

Nó có 2 tham số -

  1. Cá thể lớp.
  2. Tên tệp có phần mở rộng.
$file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv'; 
return Excel::download(new EmployeesExport, $file_name);
  • exportExcel () - Sử dụng cùng đoạn mã trên và thay đổi phần mở rộng tệp thành .xlsx.
  • exportByAgeCSV () - Đọc giá trị tuổi POST và chuyển nó cùng với phiên bản EmployeesByAgeExport($age).
$file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv'; 
return Excel::download(new EmployeesByAgeExport($age), $file_name);

Mã đã hoàn thành

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Exports\EmployeesExport;
use App\Exports\EmployeesByAgeExport;
use Excel;

class EmployeesController extends Controller
{
    public function index(){
       return view('index');
    }

    // CSV Export
    public function exportCSV(){
       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv';
       return Excel::download(new EmployeesExport, $file_name);
    }

    // Excel Export
    public function exportExcel(){
       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.xlsx';
       return Excel::download(new EmployeesExport, $file_name);
    }

    // Conditional Export (csv)
    public function exportByAgeCSV(Request $request){

       $age = $request->age;

       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv';
       return Excel::download(new EmployeesByAgeExport($age), $file_name);
    }
}

10. Xem

Tạo  index.blade.php tệp trong  resources/views/ thư mục.

Tạo 2 phần tử neo -

  1. Đặt hrefthành để {{ route('employees.exportcsv') }}xuất CSV.
  2. Đặt hrefthành để {{ route('employees.exportexcel') }}xuất Excel.

Tạo một <form method='post' action="{{ route('employees.exportbyagecsv') }}">. Thêm yếu tố đầu vào để nhập tuổi và nút gửi.

Mã đã hoàn thành

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1"> 
   <title>How to Export data to CSV & Excel format in Laravel 8</title>

   <!-- CSS -->
   <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" >
</head>
<body>

   <div class="container mt-5">

      <a class="btn btn-primary" href="{{ route('employees.exportcsv') }}">CSV Export</a> &nbsp;&nbsp;
      <a class="btn btn-primary" href="{{ route('employees.exportexcel') }}">Excel Export</a><br><br>

      <form method='post' action="{{ route('employees.exportbyagecsv') }}">
         @csrf
         <div class="mb-3">
            <label for="age" class="form-label">Age</label>
            <input type="number" class="form-control" id="age" name="age" value="0">
         </div>

         <button type="submit" class="btn btn-success">Export</button>
      </form>
   </div>

</body>
</html>

11. Demo

Xem Demo


12. Kết luận

Sử dụng hàm tạo trong lớp Export để xử lý các tham số đã truyền và sử dụng nó để tìm nạp dữ liệu.

Trong hướng dẫn này, tôi chỉ đề cập đến 2 định dạng xuất - CSV và Excel nhưng có nhiều định dạng hơn.

Nguồn: https://makitweb.com

#php #laravel #mysql 

What is GEEK

Buddha Community

Cách Xuất Cơ Sở Dữ Liệu MySQL Ở Định Dạng CSV & Excel Trong Laravel 8
Hoang Tran

Hoang Tran

1656718320

Cách Xuất Cơ Sở Dữ Liệu MySQL Ở Định Dạng CSV & Excel Trong Laravel 8

Trong Laravel, bạn không cần phải viết mã dài để xuất dữ liệu của mình, đã có một gói có sẵn cho việc đó - Laravel Excel.

Nó cho phép xuất dữ liệu ở nhiều định dạng khác nhau như - XLSX, CSV, XLS, HTML, v.v.

Trong hướng dẫn này, tôi chỉ cách bạn có thể xuất dữ liệu cơ sở dữ liệu MySQL ở định dạng CSV & Excel bằng cách sử dụng gói Laravel Excel trong Laravel 8.


1. Cài đặt gói

Yêu cầu -

  • PHP: ^7.2\|^8.0
  • Laravel: ^5.8
  • PhpS Spreadsheet: ^1.21
  • psr / simple-cache: ^1.0
  • php_zip Đã bật tiện ích mở rộng PHP 
  • php_xml Đã bật tiện ích mở rộng PHP 
  • php_gd2 Đã bật tiện ích mở rộng PHP 
  • php_iconv Đã bật tiện ích mở rộng PHP 
  • php_simplexml Đã bật tiện ích mở rộng PHP 
  • php_xmlreader Đã bật tiện ích mở rộng PHP 
  • php_zlib Đã bật tiện ích mở rộng PHP 

Cài đặt gói bằng trình soạn nhạc -

composer require maatwebsite/excel

Nếu bạn gặp lỗi khi thực hiện lệnh trên, hãy thực hiện lệnh dưới đây:

composer require psr/simple-cache:^1.0 maatwebsite/excel

Sau đó, một lần nữa thực thi -

composer require maatwebsite/excel

2. Cập nhật app.php

  • Mở  config/app.php tệp.
  • Thêm phần sau Maatwebsite\Excel\ExcelServiceProvider::class vào  'providers' -
'providers' => [
      ....
      ....
      ....  
      Maatwebsite\Excel\ExcelServiceProvider::class
];
  • Thêm phần sau  'Excel' => Maatwebsite\Excel\Facades\Excel::class vào  'aliases' -
'aliases' => [
     .... 
     .... 
     .... 
     'Excel' => Maatwebsite\Excel\Facades\Excel::class
];

3. Xuất bản gói

Chạy lệnh -

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

Điều này sẽ tạo một excel.phptệp mới trong config/.


4. Cấu hình cơ sở dữ liệu

Mở .envtệp.

Chỉ định máy chủ, tên cơ sở dữ liệu, tên người dùng và mật khẩu.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tutorial
DB_USERNAME=root
DB_PASSWORD=

5. Tạo bảng

  • Tạo một bảng mới Employeesbằng cách sử dụng di chuyển và thêm một số bản ghi.
php artisan make:migration create_employees_table
  • Bây giờ, điều hướng đến database/migrations/thư mục từ thư mục gốc của dự án.
  • Tìm một tệp PHP có kết thúc bằng create_employees_tablevà mở nó.
  • Xác định cấu trúc bảng trong up()phương thức.
public function up()
{
    Schema::create('employees', function (Blueprint $table) {
        $table->id();
        $table->string('username');
        $table->string('name');
        $table->string('email');
        $table->smallInteger('age');
        $table->timestamps();
    });
}
  • Chạy quá trình di chuyển -
php artisan migrate
  • Bảng được tạo và thêm một số bản ghi trong đó.

6. Mô hình

  • Tạo Employeesmô hình.
php artisan make:model Employees
  • Mở  app/Models/Employees.php tệp.
  • Chỉ định các thuộc tính Model có thể gán hàng loạt - tên người dùng, tên, email và tuổi bằng cách sử dụng thuộc $fillabletính.

Mã đã hoàn thành

<?php

namespace App\Models;

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

class Employees extends Model
{
    use HasFactory;

    protected $fillable = [
       'username','name','email','age'
    ];
}

7. Tạo lớp Xuất

Tôi đang tạo 2 lớp xuất chỉ cho mục đích ví dụ -

1. Lớp Nhân viên Xuất khẩu -

php artisan make:export EmployeesExport --model=Employees
  • Mở  app/Exports/EmployeesExport.php tệp.

Lớp có 2 phương thức -

  • collection () - Tải dữ liệu xuất. Ở đây, bạn có thể -
    • Trả lại tất cả hồ sơ.
    • Trả lại các cột cụ thể hoặc sửa đổi phản hồi trả lại mà tôi đã thực hiện trong lớp Xuất tiếp theo.
  • headings () - Chỉ định hàng tiêu đề.

LƯU Ý - Loại bỏ các phương thức headings () nếu bạn không muốn thêm một hàng tiêu đề.

Mã đã hoàn thành

<?php

namespace App\Exports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class EmployeesExport implements FromCollection, WithHeadings
{

    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        ## 1. Export all data
        // return Employees::all();

        ## 2. Export specific columns
        return Employees::select('id','username','name')->get();

    }

    public function headings(): array
    {
        return [
          '#',
          'Username',
          'Name'
        ];
    }
}

2. Lớp Nhân viênByAgeExport -

php artisan make:export EmployeesByAgeExport --model=Employees
  • Mở  app/Exports/EmployeesByAgeExport.php tệp.
  • Trong lớp này, tôi đã thêm __construct()để cho phép gửi một tham số trong khi tạo cá thể lớp và sử dụng nó để truy xuất dữ liệu.
  • Sau khi khởi tạo $resultArray , hãy trả $resultvề collect()-return collect($result);
  • Đề cập đến tên hàng tiêu đề trong heading()phương thức.

Mã đã hoàn thành

<?php

namespace App\Exports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class EmployeesByAgeExport implements FromCollection, WithHeadings
{
    private $agegreaterthan;

    public function __construct($age=0) 
    {
        $this->agegreaterthan = $age;
    }

    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        ## 3. Conditional export and customize result
        $records = Employees::select('*')->where('age','>',$this->agegreaterthan)->get();

        $result = array();
        foreach($records as $record){
           $result[] = array(
              'id'=>$record->id,
              'username' => $record->username,
              'name' => $record->name,
              'email' => $record->email,
              'age' => $record->age,
              'status' => 1 // Custom data
           );
        }

        return collect($result);
    }

    public function headings(): array
    {
       return [
         '#',
         'Username',
         'Name',
         'Email',
         'Age',
         'Status'
       ];
    }
}

8. Lộ trình

  • Mở  routes/web.php tệp.
  • Xác định 4 tuyến đường -
    • / -  Tải chế độ xem chỉ mục.
    • nhân viên / exportcsv - Xuất dữ liệu ở định dạng CSV.
    • nhân viên / exportexcel - Xuất dữ liệu ở định dạng Excel.
    • nhân viên / exportbyagecsv - ĐĂNG lộ trình xuất dữ liệu theo độ tuổi.

Mã đã hoàn thành

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EmployeesController;

Route::get('/', [EmployeesController::class, 'index'])->name('home'); 
Route::get('employees/exportcsv', [EmployeesController::class, 'exportCSV'])->name('employees.exportcsv');
Route::get('employees/exportexcel', [EmployeesController::class, 'exportExcel'])->name('employees.exportexcel');
Route::post('employees/exportbyagecsv', [EmployeesController::class, 'exportByAgeCSV'])->name('employees.exportbyagecsv');

9. Bộ điều khiển

  • Tạo  EmployeesController Bộ điều khiển.
php artisan make:controller EmployeesController
  • Mở  app/Http/Controllers/EmployeesController.php tệp.
  • Nhập và . EmployeesExportEmployeesByAgeExportExcel
  • Tạo 4 phương pháp -
    • index () - Tải indexchế độ xem.
    • exportCSV () -  Để xuất lệnh gọi dữ liệu Excel::download().

Nó có 2 tham số -

  1. Cá thể lớp.
  2. Tên tệp có phần mở rộng.
$file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv'; 
return Excel::download(new EmployeesExport, $file_name);
  • exportExcel () - Sử dụng cùng đoạn mã trên và thay đổi phần mở rộng tệp thành .xlsx.
  • exportByAgeCSV () - Đọc giá trị tuổi POST và chuyển nó cùng với phiên bản EmployeesByAgeExport($age).
$file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv'; 
return Excel::download(new EmployeesByAgeExport($age), $file_name);

Mã đã hoàn thành

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Exports\EmployeesExport;
use App\Exports\EmployeesByAgeExport;
use Excel;

class EmployeesController extends Controller
{
    public function index(){
       return view('index');
    }

    // CSV Export
    public function exportCSV(){
       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv';
       return Excel::download(new EmployeesExport, $file_name);
    }

    // Excel Export
    public function exportExcel(){
       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.xlsx';
       return Excel::download(new EmployeesExport, $file_name);
    }

    // Conditional Export (csv)
    public function exportByAgeCSV(Request $request){

       $age = $request->age;

       $file_name = 'employees_'.date('Y_m_d_H_i_s').'.csv';
       return Excel::download(new EmployeesByAgeExport($age), $file_name);
    }
}

10. Xem

Tạo  index.blade.php tệp trong  resources/views/ thư mục.

Tạo 2 phần tử neo -

  1. Đặt hrefthành để {{ route('employees.exportcsv') }}xuất CSV.
  2. Đặt hrefthành để {{ route('employees.exportexcel') }}xuất Excel.

Tạo một <form method='post' action="{{ route('employees.exportbyagecsv') }}">. Thêm yếu tố đầu vào để nhập tuổi và nút gửi.

Mã đã hoàn thành

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1"> 
   <title>How to Export data to CSV & Excel format in Laravel 8</title>

   <!-- CSS -->
   <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" >
</head>
<body>

   <div class="container mt-5">

      <a class="btn btn-primary" href="{{ route('employees.exportcsv') }}">CSV Export</a> &nbsp;&nbsp;
      <a class="btn btn-primary" href="{{ route('employees.exportexcel') }}">Excel Export</a><br><br>

      <form method='post' action="{{ route('employees.exportbyagecsv') }}">
         @csrf
         <div class="mb-3">
            <label for="age" class="form-label">Age</label>
            <input type="number" class="form-control" id="age" name="age" value="0">
         </div>

         <button type="submit" class="btn btn-success">Export</button>
      </form>
   </div>

</body>
</html>

11. Demo

Xem Demo


12. Kết luận

Sử dụng hàm tạo trong lớp Export để xử lý các tham số đã truyền và sử dụng nó để tìm nạp dữ liệu.

Trong hướng dẫn này, tôi chỉ đề cập đến 2 định dạng xuất - CSV và Excel nhưng có nhiều định dạng hơn.

Nguồn: https://makitweb.com

#php #laravel #mysql 

Laravel 8 Import Export CSV/EXCEL File Example

In this post i will show you Laravel 8 Import Export CSV/EXCEL File Example. We will simple create import data to xls, csv file and also we will import data to database using csv file in laravel 8 application.

Using this example we can easily import-export and download the csv & excel file from the database using the maatwebsite/excel composer package. maatwebsite/excel provide easy way to import and export csv file in laravel 8 using database model.

Laravel 8 Import Export CSV/EXCEL File Example

https://websolutionstuff.com/post/laravel-8-import-export-csv-excel-file-example

#laravel 8 import export csv/excel file example #laravel 8 #import #export #csv/excel #import and export csv file in laravel 8

I am Developer

1617089618

Laravel 8 Tutorial for Beginners

Hello everyone! I just updated this tutorial for Laravel 8. In this tutorial, we’ll go through the basics of the Laravel framework by building a simple blogging system. Note that this tutorial is only for beginners who are interested in web development but don’t know where to start. Check it out if you are interested: Laravel Tutorial For Beginners

Laravel is a very powerful framework that follows the MVC structure. It is designed for web developers who need a simple, elegant yet powerful toolkit to build a fully-featured website.

Recommended:-Laravel Try Catch

#laravel 8 tutorial #laravel 8 tutorial crud #laravel 8 tutorial point #laravel 8 auth tutorial #laravel 8 project example #laravel 8 tutorial for beginners

I am Developer

1599536794

Laravel 8 New Features | Release Notes - Tuts Make

In this post, i will show you what’s new in laravel 8 version.

#What’s new in Laravel 8?

  • 1 - Change Path Of Default Models Directory
  • 2 - Removed Controllers Namespace Prefix
  • 3 - Enhancements on php artisan serve
  • 4 - Enhanced Rate Limiting
  • 5 - Enhanced on Route Caching
  • 6 - Update on Pagination Design
  • 8 - Dynamic Blade Componenets
  • 7 - Update Syntax for Closure Based Event Listeners
  • 8 - Queueable Model Event Listeners
  • 9 - Maintenance mode: secret access
  • 10 - Maintenance mode: pre-rendered page
  • 11 - Queued job batching
  • 12 - Queue backoff()
  • 13 - Laravel Factory

https://www.tutsmake.com/laravel-8-new-features-release-notes/

#laravel 8 features #laravel 8 release date #laravel 8 tutorial #news - laravel 8 new features #what's new in laravel 8 #laravel 8 release notes

Duyen Hoang

Duyen Hoang

1656714120

Cách Nhập Dữ Liệu CSV & Excel Vào Cơ Sở Dữ Liệu MySQL Trong Laravel 8

Nhập hàng loạt dữ liệu là một tính năng hữu ích để thêm các bản ghi được lưu trữ trong một tệp vào cơ sở dữ liệu. Dữ liệu có thể được lưu trữ ở định dạng - CSV, Excel, XML, ODS, v.v.

Trong hướng dẫn này, tôi chỉ cách bạn có thể nhập dữ liệu CSV & Excel vào cơ sở dữ liệu MySQL bằng cách sử dụng gói Laravel Excel trong dự án Laravel 8.


1. Cài đặt gói

Yêu cầu -

  • PHP: ^7.2\|^8.0
  • Laravel: ^5.8
  • PhpS Spreadsheet: ^1.21
  • psr / simple-cache: ^1.0
  • php_zip Đã bật tiện ích mở rộng PHP 
  • php_xml Đã bật tiện ích mở rộng PHP 
  • php_gd2 Đã bật tiện ích mở rộng PHP 
  • php_iconv Đã bật tiện ích mở rộng PHP 
  • php_simplexml Đã bật tiện ích mở rộng PHP 
  • php_xmlreader Đã bật tiện ích mở rộng PHP 
  • php_zlib Đã bật tiện ích mở rộng PHP 

Cài đặt gói bằng trình soạn nhạc -

composer require maatwebsite/excel

Nếu bạn gặp lỗi khi thực hiện lệnh trên, hãy thực hiện lệnh dưới đây:

composer require psr/simple-cache:^1.0 maatwebsite/excel

Sau đó, một lần nữa thực thi -

composer require maatwebsite/excel

2. Cập nhật app.php

  • Mở  config/app.php tệp.
  • Thêm phần sau Maatwebsite\Excel\ExcelServiceProvider::class vào  'providers' -
'providers' => [
      ....
      ....
      ....  
      Maatwebsite\Excel\ExcelServiceProvider::class
];
  • Thêm phần sau  'Excel' => Maatwebsite\Excel\Facades\Excel::class vào  'aliases' -
'aliases' => [
     .... 
     .... 
     .... 
     'Excel' => Maatwebsite\Excel\Facades\Excel::class
];

3. Xuất bản gói

Chạy lệnh -

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

Điều này sẽ tạo một excel.phptệp mới trong config/.


4. Cấu hình cơ sở dữ liệu

Mở .envtệp.

Chỉ định máy chủ, tên cơ sở dữ liệu, tên người dùng và mật khẩu.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tutorial
DB_USERNAME=root
DB_PASSWORD=

5. Tạo bảng

  • Tạo một bảng mới Employeesbằng cách sử dụng di chuyển và thêm một số bản ghi.
php artisan make:migration create_employees_table
  • Bây giờ, điều hướng đến database/migrations/thư mục từ thư mục gốc của dự án.
  • Tìm một tệp PHP có kết thúc bằng create_employees_tablevà mở nó.
  • Xác định cấu trúc bảng trong up()phương thức.
public function up()
{
    Schema::create('employees', function (Blueprint $table) {
        $table->id();
        $table->string('username');
        $table->string('name');
        $table->string('email');
        $table->smallInteger('age');
        $table->timestamps();
    });
}
  • Chạy quá trình di chuyển -
php artisan migrate
  • Bảng đã được tạo.

6. Mô hình

  • Tạo Employeesmô hình.
php artisan make:model Employees
  • Mở  app/Models/Employees.php tệp.
  • Chỉ định các thuộc tính Model có thể gán hàng loạt - tên người dùng, tên, email và tuổi bằng cách sử dụng thuộc $fillabletính.

Mã đã hoàn thành

<?php

namespace App\Models;

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

class Employees extends Model
{
    use HasFactory;

    protected $fillable = [
       'username','name','email','age'
    ];
}

7. Tạo lớp Nhập

Tôi đang tạo 2 lớp nhập chỉ cho mục đích ví dụ -

1. Lớp nhân viênImport -

php artisan make:import EmployeesImport --model=Employees
  • Mở  app/Imports/EmployeesImport.php tệp.
  • Lớp có 1 phương thức -
    • model () - Đọc giá trị từ $rowMảng và chèn bản ghi nếu id email không tồn tại trong employeesbảng, nếu không sẽ trả về null.

LƯU Ý - Lớp nhập này bắt đầu đọc các bản ghi từ hàng đầu tiên. Tôi đã giải thích cách bỏ qua hàng đầu tiên chứa tiêu đề trong lớp Nhập tiếp theo.

Tệp CSV không có hàng tiêu đề -

user1Người dùng1 u1user1@makitweb.com28
user2Người dùng2 u2user2@makitweb.com24

Mã đã hoàn thành

<?php
namespace App\Imports;

use App\Models\Employees;
use Maatwebsite\Excel\Concerns\ToModel;

class EmployeesImport implements ToModel {
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row) {
 
       // Check email already exists
       $count = Employees::where('email',$row[2])->count();
       if($count > 0){
          return null;
       }
       return new Employees([
          'username' => $row[0],
          'name' => $row[1], 
          'email' => $row[2],
          'age' => $row[3],
       ]);
    }

}

2. Lớp nhân viên2Import -

php artisan make:import Employees2Import --model=Employees
  • Mở  app/Imports/Employees2Import.php tệp.
  • Lớp có 2 phương thức -
    • collection () - Xác thực $rowsdữ liệu Mảng. Nếu xác thực thành công thì hãy chèn bản ghi nếu id email không tồn tại trong employeesbảng nếu không sẽ trả về lỗi.

LƯU Ý - Nếu  WithHeadingRowđược triển khai thì $rowsMảng chứa tiêu đề hàng dưới dạng tên khóa thay vì chỉ mục.

  • headerRow () - Trả về vị trí chỉ mục tiêu đề.

Tệp CSV có hàng tiêu đề -

tên tài khoảnTênE-mailTuổi tác
yssyogeshYogesh singhyogesh@makitweb.com28
bsonarikaSonarika Bhadoriabsonarika@makitweb.com28
vishalVishal Sahuvishal@makitweb.com31

Mã đã hoàn thành

<?php

namespace App\Imports;

use App\Models\Employees;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Illuminate\Support\Facades\Validator;

class Employees2Import implements ToCollection ,WithHeadingRow
{

    public function collection(Collection $rows){

       // Validate
       Validator::make($rows->toArray(), [
          '*.username' => 'required|string',
          '*.name' => 'required|string',
          '*.email' => 'required|email',
          '*.age' => 'required|integer',
       ],[
          '*.username.required'=> "The username field is required.",
          '*.username.string'=> "The username must be string.",
          '*.name.required'=> "The name field is required.",
          '*.name.string'=> "The name must be string.",
          '*.email.required'=> "The email field is required.",
          '*.email.email'=> "The email must be a valid email address.",
          '*.age.integer'=> "The age must be an integer."
       ])->validate();

       foreach ($rows as $row) {

          // Check email already exists
          $count = Employees::where('email',$row['email'])->count();
          if($count > 0){
             continue;
          }
          Employees::create([
             'username' => $row['username'],
             'name' => $row['name'], 
             'email' => $row['email'],
             'age' => $row['age'],
         ]);
       }
    }

    // Specify header row index position to skip
    public function headingRow(): int {
       return 1;
    }
}

8. Lộ trình

  • Mở  routes/web.php tệp.
  • Xác định 3 tuyến đường -
    • / -  Tải chế độ xem chỉ mục.
    • nhân viên / importdata - Đăng tuyến để Nhập dữ liệu.
    • nhân viên / validateandimportdata - Đăng tuyến để xác thực và nhập dữ liệu.

Mã đã hoàn thành

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EmployeesController;

Route::get('/', [EmployeesController::class, 'index'])->name('home'); 
Route::post('employees/importdata/', [EmployeesController::class, 'importData'])->name('employees.importdata');
Route::post('employees/validateandimportdata/', [EmployeesController::class, 'validateAndImportdata'])->name('employees.validateandimportdata');

9. Bộ điều khiển

  • Tạo  EmployeesController Bộ điều khiển.
php artisan make:controller EmployeesController
  • Mở  app/Http/Controllers/EmployeesController.php tệp.
  • Nhập   và  . EmployeesImportEmployees2ImportExcel
  • Tạo 3 phương pháp -
    • index () - Tải indexchế độ xem.
    • importdata () - Để nhập cuộc gọi Excel::import().

Chuyển 2 tham số -

  1. EmployeesImportCá thể lớp.
  2. Vượt qua vị trí 'tạm thời' của tệp đã chọn.
    • validateAndImportdata () - Một lần nữa gọi Excel::import().

Chuyển 2 tham số -

  1. Employees2ImportCá thể lớp.
  2. Chuyển vị trí tệp được lưu trữ (Tôi đã lưu tệp trong public/employees.xlsxthư mục).

Mã đã hoàn thành

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\EmployeesImport;
use App\Imports\Employees2Import;
use Excel;

class EmployeesController extends Controller
{
   public function index(){
      return view('index');
   }

   // Import data 
   public function importdata(Request $request){
      Excel::import(new EmployeesImport, $request->file('file')->store('temp'));
      return back()->with('success', 'Import successfully!');
   }

   // Validate and Import data 
   public function validateAndImportdata(Request $request){

      Excel::import(new Employees2Import, "employees.xlsx");
      return back()->with('success', 'Import successfully!');
   }

}

10. Xem

Tạo  index.blade.php tệp trong  resources/views/ thư mục.

Tạo 2 <form>-

  • Trong <form >hành động đầu tiên đặt thành {{ route('employees.importdata') }}. Tạo một phần tử tệp và một nút gửi.
  • Trong <form>hành động đặt thứ 2 thành {{ route('employees.validateandimportdata') }}. Tạo nút gửi.

Lặp $errors->all()lại để hiển thị lỗi.

Mã đã hoàn thành

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <title>How to Import data into MySQL database in Laravel 8</title>

   <!-- CSS -->
   <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" >
</head>
<body>

   <div class="container mt-5">

      <!-- Success message -->
      @if(Session::has('success'))
         <div class="alert alert-success">
            {{ Session::get('success') }}
         </div>
      @endif

      <form method='post' action="{{ route('employees.importdata') }}" enctype="multipart/form-data">
         @csrf
         <div class="mb-3">
            <label for="file" class="form-label">File</label>
            <input type="file" class="form-control" id="file" name="file" value="">
         </div>

         <button type="submit" class="btn btn-success">Import</button>
      </form>

      <!-- Import data with validation -->
      <h2 class='mt-5'>Validate and import data</h2>
      {{-- Display errors --}}
      @if (count($errors) > 0)
         <div class="row">
            <div class="col-md-12 ">
                <div class="alert alert-danger">
                   <ul>
                      @foreach($errors->all() as $error)
                         <li>{{ $error }} </li>
                      @endforeach 
                   </ul> 
                </div>
            </div>
         </div>
      @endif

      <form method='post' action="{{ route('employees.validateandimportdata') }}" >
         @csrf
         <button type="submit" class="btn btn-success">Import</button>
      </form>
   </div>

</body>
</html>

11. Đầu ra

Xem đầu ra


12. Kết luận

Đảm bảo xác thực bản ghi trước khi chèn hoặc cập nhật bản ghi trong lớp Nhập. Chỉ định WithHeadingRowtrong lớp Nhập nếu tệp nhập có hàng tiêu đề.

Nguồn: https://makitweb.com

#laravel #php #mysql