Esto lo tendrías que realizar por medio de los observers del modelo.
Los observers de modelos Eloquent permiten enganchar código para cuando ocurre cualquier operación de manipulación de los elementos del tipo de ese modelo.
Por ejemplo en tu caso tendrás que crear un observer para el modelo de producto. En ese observer puedes crear cualquier serie de operativas, como la de actualizar los precios de los packs.
Lee la documentación de Laravel para tener más datos, pero básicamente los pasos son los siguientes:
Crear el observer:
php artisan make:observer ProductObserver --model=Product
Esto creará el observer, en la carpeta app/observers, que tendrá métodos como estos:
public function created(Product $product)
{
// Aquí pones por ejemplo la operativa a producirse cuando se crea un elemento de este modelo
}
public function updated(Product $product)
{
// Código a ejecutar cuando se produzca una actualización del producto
}
Ahora te toca registrar el observer. Esto lo tienes que realizar en cualquier "ServiceProvider". Podría servirte como dicen en la documentación de Laravel el AppServiceProvider, pero si lo que quieres es que ese observer solo esté disponible dentro de Nova, creo que lo más lógico sería hacer el registro en el NovaServiceProvider.
El observer del modelo Laravel Eloquent lo registras desde el método boot(), de esta manera:
use App\Product;
use App\Observers\ProductObserver;
class NovaServiceProvider extends NovaApplicationServiceProvider
{
public function boot()
{
parent::boot();
Product::observe(ProductObserver::class);
}
//...
}