解決策1:グローバルスコープを使用してフィールドを選択ステートメントに追加する
仮想列に関する1つの問題は、それを妨げない場合、Eloquentがそれらを更新しようとすることです。 $ fillable配列から除外して、グローバルスコープ を使用できます。 モデルに仮想列を追加するには、次のようにします。
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'));
});
}
使用している日付関数はsqliteなどのデータベースでは機能しないため、これによりモデルがMySQLに結合されることに注意する必要があります。
解決策2:MySQLビューを使用する
通常、複数の計算フィールドがある場合は、MySQLビューを作成します。必要なすべての計算フィールドを使用してビューを作成すると、クエリスコープを気にすることなく、そのビューの新しいEloquentモデルを作成できます。
1つの注意点は、もちろんこのモデルでは作成/更新/削除を使用できないことですが、モデルを表示目的でのみ使用している場合は、問題にはなりません。