Thực hiện tính năng transfer data giữa 2 bảng trong Laravel

Thực hiện tính năng transfer data giữa 2 bảng trong Laravel

Thực hiện tính năng chuyển dữ liệu giữa hai bảng today_attendancesattendances trong Laravel, mình sẽ ghi lại quy trình này. Quy trình sẽ bao gồm tạo cron job, middleware bảo mật, và một command trong Laravel để thực hiện công việc chuyển dữ liệu hàng ngày vào lúc 6h sáng.

1. Tạo Command trong Laravel

Đầu tiên, tạo một command để xử lý việc chuyển dữ liệu:

  • 1. Chạy lệnh tạo command trong terminal:
php artisan make:command TransferAttendanceData
Bash
  • 2. Mở file command vừa tạo tại app/Console/Commands/TransferAttendanceData.php và sửa nội dung như sau:
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use DB;

class TransferAttendanceData extends Command
{
    protected $signature = 'attendance:transfer';
    protected $description = 'Transfer data from today_attendances to attendances for records before today';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        // Lấy các bản ghi từ bảng today_attendances của ngày hôm trước trở về trước
        $dataToTransfer = DB::table('today_attendances')
            ->whereDate('attendance_date', '<', now()->format('Y-m-d'))
            ->get();

        // Chèn dữ liệu vào bảng attendances
        foreach ($dataToTransfer as $record) {
            DB::table('attendances')->insert((array) $record);
        }

        // Xóa dữ liệu đã chuyển từ bảng today_attendances
        DB::table('today_attendances')
            ->whereDate('attendance_date', '<', now()->format('Y-m-d'))
            ->delete();

        $this->info('Data transfer completed successfully!');
    }
}
PHP

2. Đăng ký Command trong Kernel để Tự Động Chạy Cron Job

Mở file app/Console/Kernel.php và đăng ký command attendance:transfer để chạy tự động vào 6h sáng hàng ngày.

protected function schedule(Schedule $schedule)
{
    $schedule->command('attendance:transfer')->dailyAt('06:00');
}
PHP

3. Thiết lập Cron Job trên Share Hosting

Với share hosting, bạn có thể thiết lập cron job để chạy lệnh Laravel command:

Truy cập vào phần Cron Jobs trong cPanel của share hosting..

Thêm cron job mới với cú pháp sau:

php /path/to/your/project/artisan schedule:run >> /dev/null 2>&1
Bash

Cài đặt cron job này chạy mỗi phút để đảm bảo rằng bất kỳ command nào đã lên lịch trong Laravel đều được thực hiện.

Lưu ý: Thay /path/to/your/project/ bằng đường dẫn đầy đủ tới thư mục Laravel của bạn.

4. Thiết lập Middleware hoặc Bảo Mật cho Command (Tùy chọn)

Nếu command này chỉ cần thực hiện qua cron job, không cần phải thiết lập thêm bảo mật. Tuy nhiên, nếu bạn muốn thêm xác thực đặc biệt khi command này chạy qua HTTP hoặc thực thi từ giao diện admin, bạn có thể:

  1. Thiết lập middleware bảo mật trên các route hoặc HTTP request liên quan.
  2. Sử dụng xác thực API (ví dụ: API token) nếu command được gọi qua HTTP.

5. Kiểm Tra Tính Năng

Sau khi thiết lập cron job và command, bạn có thể kiểm tra:

Chạy command thủ công để kiểm tra:

php artisan attendance:transfer
Bash

Đợi tới thời gian đã đặt của cron job để kiểm tra tự động.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *