Create.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\AsynchronousOperations\Model\ResourceModel\Operation;
  7. use Magento\Framework\EntityManager\MetadataPool;
  8. use Magento\Framework\EntityManager\TypeResolver;
  9. use Magento\Framework\App\ResourceConnection;
  10. use Magento\Framework\Phrase;
  11. /**
  12. * Create operation for list of bulk operations.
  13. */
  14. class Create implements \Magento\Framework\EntityManager\Operation\CreateInterface
  15. {
  16. /**
  17. * @var MetadataPool
  18. */
  19. private $metadataPool;
  20. /**
  21. * @var TypeResolver
  22. */
  23. private $typeResolver;
  24. /**
  25. * @var ResourceConnection
  26. */
  27. private $resourceConnection;
  28. /**
  29. * @param MetadataPool $metadataPool
  30. * @param TypeResolver $typeResolver
  31. * @param ResourceConnection $resourceConnection
  32. */
  33. public function __construct(
  34. MetadataPool $metadataPool,
  35. TypeResolver $typeResolver,
  36. ResourceConnection $resourceConnection
  37. ) {
  38. $this->metadataPool = $metadataPool;
  39. $this->typeResolver = $typeResolver;
  40. $this->resourceConnection = $resourceConnection;
  41. }
  42. /**
  43. * Save all operations from the list in one query.
  44. *
  45. * @param object $entity
  46. * @param array $arguments
  47. * @return object
  48. * @throws \Exception
  49. *
  50. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  51. */
  52. public function execute($entity, $arguments = [])
  53. {
  54. $entityType = $this->typeResolver->resolve($entity);
  55. $metadata = $this->metadataPool->getMetadata($entityType);
  56. $connection = $this->resourceConnection->getConnection($metadata->getEntityConnectionName());
  57. try {
  58. $connection->beginTransaction();
  59. $data = [];
  60. foreach ($entity->getItems() as $operation) {
  61. $data[] = $operation->getData();
  62. }
  63. $connection->insertOnDuplicate(
  64. $metadata->getEntityTable(),
  65. $data,
  66. [
  67. 'status',
  68. 'error_code',
  69. 'result_message',
  70. ]
  71. );
  72. $connection->commit();
  73. } catch (\Exception $e) {
  74. $connection->rollBack();
  75. throw $e;
  76. }
  77. return $entity;
  78. }
  79. }