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_attendances
và attendances
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!');
}
}
PHP2. Đă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');
}
PHP3. 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
BashCà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ể:
- Thiết lập middleware bảo mật trên các route hoặc HTTP request liên quan.
- 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.