У меня есть простое действие в Laravel Nova, которое обновляет складские запасы через вызов API. Я хочу иметь возможность ставить это в очередь как отдельные задания для каждого продукта, для которого требуется обновление для смещения вызовов API.
Когда я добавляю свое действие к ресурсу и запускаю его через страницу индекса, выбирая несколько продуктов и при выполнении действия в моей таблице заданий создается только одно задание.
Таким образом, когда очередь обрабатывается, вместо того, чтобы ставить в очередь каждый продукт для отдельного обновления, выполняется одно задание, которое циклически перебирает все выбранные продукты и производит несколько запросов API в быстрой последовательности, что не является моим желаемым результатом.
Есть ли способ для действия создать задание для каждого ресурса, для которого выполняется действие?
Класс действия
class UpdateInventory extends Action implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
public function __construct()
{
$this->connection = config('queue.default');
$this->queue = 'inventory_update';
}
/**
* Perform the action on the given models.
*/
public function handle(ActionFields $fields, Collection $products)
{
foreach ($products as $product) {
try {
$inventoryService = resolve(InventoryService::class);
$inventoryService->updateProductInventory($product); // <- API calls within
$this->markAsFinished($product);
} catch (\Exception $e) {
$this->markAsFailed($product, $e);
}
}
return Action::message("Inventory update started");
}
}