CheckIfExists.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\EntityManager\Operation;
  7. use Magento\Framework\EntityManager\Operation\CheckIfExistsInterface;
  8. use Magento\Framework\EntityManager\MetadataPool;
  9. use Magento\Framework\EntityManager\HydratorPool;
  10. use Magento\Framework\EntityManager\TypeResolver;
  11. use Magento\Framework\App\ResourceConnection;
  12. /**
  13. * Class CheckIfExists
  14. */
  15. class CheckIfExists implements CheckIfExistsInterface
  16. {
  17. /**
  18. * @var ResourceConnection
  19. */
  20. private $resourceConnection;
  21. /**
  22. * @var MetadataPool
  23. */
  24. private $metadataPool;
  25. /**
  26. * @var HydratorPool
  27. */
  28. private $hydratorPool;
  29. /**
  30. * @var TypeResolver
  31. */
  32. private $typeResolver;
  33. /**
  34. * @param MetadataPool $metadataPool
  35. * @param HydratorPool $hydratorPool
  36. * @param TypeResolver $typeResolver
  37. * @param ResourceConnection $resourceConnection
  38. */
  39. public function __construct(
  40. TypeResolver $typeResolver,
  41. MetadataPool $metadataPool,
  42. HydratorPool $hydratorPool,
  43. ResourceConnection $resourceConnection
  44. ) {
  45. $this->metadataPool = $metadataPool;
  46. $this->hydratorPool = $hydratorPool;
  47. $this->typeResolver = $typeResolver;
  48. $this->resourceConnection = $resourceConnection;
  49. }
  50. /**
  51. * @param object $entity
  52. * @param array $arguments
  53. * @return bool
  54. * @throws \Exception
  55. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  56. */
  57. public function execute($entity, $arguments = [])
  58. {
  59. $entityType = $this->typeResolver->resolve($entity);
  60. $metadata = $this->metadataPool->getMetadata($entityType);
  61. $hydrator = $this->hydratorPool->getHydrator($entityType);
  62. $connection = $this->resourceConnection->getConnectionByName($metadata->getEntityConnectionName());
  63. $entityData = $hydrator->extract($entity);
  64. if (!isset($entityData[$metadata->getIdentifierField()])) {
  65. return false;
  66. }
  67. return (bool)$connection->fetchOne(
  68. $connection->select()
  69. ->from($metadata->getEntityTable(), [$metadata->getIdentifierField()])
  70. ->where($metadata->getIdentifierField() . ' = ?', $entityData[$metadata->getIdentifierField()])
  71. ->limit(1)
  72. );
  73. }
  74. }