Giải pháp 1:Sử dụng phạm vi toàn cục để thêm trường vào các câu lệnh đã chọn của bạn
Một vấn đề với các cột ảo là Eloquent sẽ cố gắng cập nhật chúng nếu bạn không ngăn được. Bạn có thể loại trừ nó khỏi mảng $ fillable và sử dụng phạm vi toàn cầu trong mô hình của bạn để thêm cột ảo, giống như:
protected static function boot()
{
parent::boot();
static::addGlobalScope('next_action', function (Builder $builder) {
$builder->addSelect(DB::raw('DATE_ADD(updated_at, INTERVAL days DAY) AS next_action'));
});
}
Bạn sẽ phải nhớ rằng điều này sẽ ghép nối Mô hình của bạn với MySQL vì các hàm ngày bạn đang sử dụng sẽ không hoạt động trong cơ sở dữ liệu như sqlite.
Giải pháp 2:Sử dụng chế độ xem MySQL
Thông thường những gì tôi làm khi có nhiều trường được tính toán là tạo một dạng xem MySQL. Tạo chế độ xem với tất cả các trường được tính toán mà bạn muốn, sau đó bạn có thể tạo mô hình Eloquent mới cho chế độ xem đó mà không phải lo lắng về phạm vi truy vấn.
Một lưu ý là bạn tất nhiên không thể sử dụng tạo / cập nhật / xóa trên mô hình này, nhưng nếu bạn chỉ sử dụng mô hình cho mục đích hiển thị, đó không phải là vấn đề.