JoinProcessorHelper.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Api\ExtensionAttribute;
  7. use Magento\Framework\Api\ExtensionAttribute\Config;
  8. use Magento\Framework\Api\ExtensionAttribute\Config\Converter as Converter;
  9. use Magento\Framework\Api\SimpleDataObjectConverter;
  10. /**
  11. * Join processor helper class
  12. */
  13. class JoinProcessorHelper
  14. {
  15. /**
  16. * @var \Magento\Framework\Api\ExtensionAttribute\Config
  17. */
  18. private $config;
  19. /**
  20. * @var \Magento\Framework\Api\ExtensionAttribute\JoinDataInterfaceFactory
  21. */
  22. private $joinDataInterfaceFactory;
  23. /**
  24. * Initialize dependencies.
  25. *
  26. * @param Config $config
  27. * @param JoinDataInterfaceFactory $joinDataInterfaceFactory
  28. */
  29. public function __construct(
  30. Config $config,
  31. JoinDataInterfaceFactory $joinDataInterfaceFactory
  32. ) {
  33. $this->config = $config;
  34. $this->joinDataInterfaceFactory = $joinDataInterfaceFactory;
  35. }
  36. /**
  37. * Generate a list of select fields with mapping of client facing attribute names to field names used in SQL select.
  38. *
  39. * @param string $attributeCode
  40. * @param array $selectFields
  41. * @return array
  42. */
  43. public function getSelectFieldsMap($attributeCode, $selectFields)
  44. {
  45. $referenceTableAlias = $this->getReferenceTableAlias($attributeCode);
  46. $useFieldInAlias = (count($selectFields) > 1);
  47. $selectFieldsAliases = [];
  48. foreach ($selectFields as $selectField) {
  49. $internalFieldName = $selectField[Converter::JOIN_FIELD_COLUMN]
  50. ? $selectField[Converter::JOIN_FIELD_COLUMN]
  51. : $selectField[Converter::JOIN_FIELD];
  52. $setterName = 'set'
  53. . ucfirst(SimpleDataObjectConverter::snakeCaseToCamelCase($selectField[Converter::JOIN_FIELD]));
  54. $selectFieldsAliases[] = [
  55. JoinDataInterface::SELECT_FIELD_EXTERNAL_ALIAS => $attributeCode
  56. . ($useFieldInAlias ? '.' . $selectField[Converter::JOIN_FIELD] : ''),
  57. JoinDataInterface::SELECT_FIELD_INTERNAL_ALIAS => $referenceTableAlias . '_' . $internalFieldName,
  58. JoinDataInterface::SELECT_FIELD_WITH_DB_PREFIX => $referenceTableAlias . '.' . $internalFieldName,
  59. JoinDataInterface::SELECT_FIELD_SETTER => $setterName
  60. ];
  61. }
  62. return $selectFieldsAliases;
  63. }
  64. /**
  65. * Generate reference table alias.
  66. *
  67. * @param string $attributeCode
  68. * @return string
  69. */
  70. public function getReferenceTableAlias($attributeCode)
  71. {
  72. return 'extension_attribute_' . $attributeCode;
  73. }
  74. /**
  75. * Returns config data values
  76. *
  77. * @return array|mixed|null
  78. */
  79. public function getConfigData()
  80. {
  81. return $this->config->get();
  82. }
  83. /**
  84. * JoinDataInterface getter
  85. *
  86. * @return JoinDataInterface
  87. */
  88. public function getJoinDataInterface()
  89. {
  90. return $this->joinDataInterfaceFactory->create();
  91. }
  92. }