<?php declare (strict_types = 1); namespace App\Nova\Actions; use App\Models\Product; use App\Models\Retailer; use Illuminate\Bus\Queueable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Collection; use Laravel\Nova\Actions\Action; use Laravel\Nova\Fields\ActionFields; use Laravel\Nova\Fields\Select; use Laravel\Nova\Http\Requests\NovaRequest; class ChangeValue extends Action { use InteractsWithQueue, Queueable; public ?string $field; public ?string $retailer; public ?array $retailers; public function __construct(?string $field, ?string $retailer, ?array $retailers) { $this->field = $field; $this->retailer = $retailer; $this->retailers = $retailers; } public function handle(ActionFields $fields, Collection $models) { foreach ($models as $model) { $retailersValue = Product::where('retailer_id', $fields->fromRetailer)->where('sku', $model['sku'])->select($this->field)->first(); if(!$retailersValue) { return Action::danger('Of the selected products, not all retailers have a qualifying product!'); } Product::where('retailer_id', $this->retailer)->where('sku', $model['sku'])->update([$this->field => $retailersValue[$this->field]]); } return Action::redirect('/'); } public function fields(NovaRequest $request) { return [ Select::make('Retailer from change', 'fromRetailer') ->options( Retailer::whereIn('id', $this->retailers)->pluck('name', 'id')->all() ) ->rules('required'), ]; } }