Solução 1:usando um escopo global para adicionar o campo às suas instruções de seleção
O único problema com as colunas virtuais é que o Eloquent tentará atualizá-las se você não impedir. Você pode excluí-lo do array $fillable e usar um escopo global em seu modelo para adicionar a coluna virtual, algo como:
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'));
});
}
Você deve ter em mente que isso acoplará seu modelo ao MySQL, pois as funções de data que você está usando não funcionarão em bancos de dados como o sqlite.
Solução 2:usando uma visualização do MySQL
Normalmente, o que faço quando tenho vários campos calculados é criar uma visualização do MySQL. Crie a visão com todos os campos calculados que você deseja, então você pode criar um novo modelo Eloquent para essa visão sem ter que se preocupar com escopos de consulta.
A única ressalva é que você obviamente não pode usar criar/atualizar/excluir neste modelo, mas se você estiver usando o modelo apenas para fins de exibição, isso não deve ser um problema.