How to create custom command to delete order in magento2 – In Magento 2 you can create your own custom command for any action. As magento doesn’t allow to delete order from admin dashboard then in this case there comes a need for how to delete orders. So here using this post I am going to explain how to create your own custom command for deleting magento order.
For this you just need to follow some easy steps-
- Create a Command class in the path<module_dir>/Console/Command (As recommended by magento), like here I am using the path app/code/Webkul/CustomCommand/Console/Command
namespace Webkul\CustomCommand\Console\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Magento\Sales\Model\Order; use Magento\Framework\Registry; /** * Class OrderDeleteCommand */ class OrderDeleteCommand extends Command { /** * Order argument */ const ORDER_ARGUMENT = 'order_id'; /** * Allow all */ const ALLOW_ALL = 'allow-all'; /** * All order id */ const ALL_ORDER = 'All'; /** * Order * * @var Order */ private $order; /** * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory */ protected $orderCollectionFactory; /** * @var \Magento\Framework\Registry */ protected $registry; /** * @param ModuleListInterface $moduleList */ public function __construct( Order $order, \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory, Registry $registry ) { $this->order = $order; $this->registry = $registry; $this->orderCollectionFactory = $orderCollectionFactory; parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('webkul:orderDelete') ->setDescription('Order Delete command') ->setDefinition([ new InputArgument( self::ORDER_ARGUMENT, InputArgument::OPTIONAL, 'OrderId' ), new InputOption( self::ALLOW_ALL, '-a', InputOption::VALUE_NONE, 'Allow all OrderId' ), ]); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $orderId = $input->getArgument(self::ORDER_ARGUMENT); $allowAll = $input->getOption(self::ALLOW_ALL); if (is_null($orderId)) { if ($allowAll) { $this->registry->register('isSecureArea','true'); //create secure area to delete orders $orderAllColl = $this->orderCollectionFactory->create(); //Get Order Collection foreach ($orderAllColl as $orderCollData) { $orderCollData->delete(); //Delete Order } $this->registry->unregister('isSecureArea'); //unset secure area $output->writeln('<info>All orders are deleted.</info>'); //Displaying output on terminal } else { throw new \InvalidArgumentException('Argument ' . self::ORDER_ARGUMENT . ' is missing.'); } } if($orderId){ $orderColl = $this->order->load($orderId); if(empty($orderColl) || !$orderColl->getId()){ $output->writeln('<info>Order with id ' . $orderId . ' does not exist.</info>'); }else{ $this->registry->register('isSecureArea','true'); //create secure area to delete orders $orderColl->delete(); //Delete Order $this->registry->unregister('isSecureArea'); //unset secure area $output->writeln('<info>Order with id ' . $orderId . ' is deleted.</info>'); } } } }
2. Declaration of Command class in Magento\Framework\Console\CommandList
using dependency injection in file path “app/code/Webkul/CustomCommand/di.xml”
<type name="Magento\Framework\Console\CommandList"> <arguments> <argument name="commands" xsi:type="array"> <item name="order_delete_command" xsi:type="object">Webkul\CustomCommand\Console\Command\OrderDeleteCommand</item> </argument> </arguments> </type>
3. Now clear the cache and compile the module.
4. Now run the following command to check the working process of this commands-
php bin/magento –list
now you will see the custom created command as shown in the given screenshot
Now run command – php bin/magento webkul:orderDelete 1 to delete order with order id 1 through command line. For deleting all orders just run the command – php bin/magento webkul:orderDelete -a
So in this way you can create your own custom commands for any action.
For complete module please find at https://github.com/webkul/magento2-custom-command .
You can also check the below links:
https://webkul.com/blog/create-a-custom-command-to-disable-a-module-in-magento-2/
https://devdocs.magento.com/guides/v2.3/config-guide/cli/config-cli.html
Be the first to comment.