Example #1
0
 /**
  * {@inheritdoc}
  */
 public function process(DbCollection $collection, $extensibleEntityClass = null)
 {
     $extensibleEntityClass = $extensibleEntityClass ?: $collection->getItemObjectClass();
     $joinDirectives = $this->getJoinDirectivesForType($extensibleEntityClass);
     foreach ($joinDirectives as $attributeCode => $directive) {
         /** @var JoinDataInterface $joinData */
         $joinData = $this->extensionAttributeJoinDataFactory->create();
         $joinData->setAttributeCode($attributeCode)->setReferenceTable($directive[Converter::JOIN_REFERENCE_TABLE])->setReferenceTableAlias($this->getReferenceTableAlias($attributeCode))->setReferenceField($directive[Converter::JOIN_REFERENCE_FIELD])->setJoinField($directive[Converter::JOIN_ON_FIELD]);
         $joinData->setSelectFields($this->getSelectFieldsMap($attributeCode, $directive[Converter::JOIN_FIELDS]));
         $collection->joinExtensionAttribute($joinData, $this);
     }
 }
 /**
  * Test the processing of the join config for a particular type
  */
 public function testProcess()
 {
     $this->config->expects($this->once())->method('get')->will($this->returnValue($this->getConfig()));
     $collection = $this->getMockBuilder('Magento\\Framework\\Data\\Collection\\AbstractDb')->disableOriginalConstructor()->setMethods(['joinExtensionAttribute'])->getMockForAbstractClass();
     $extensionAttributeJoinData = new JoinData();
     $this->extensionAttributeJoinDataFactory->expects($this->once())->method('create')->willReturn($extensionAttributeJoinData);
     $collection->expects($this->once())->method('joinExtensionAttribute')->with($extensionAttributeJoinData);
     $this->joinProcessor->process($collection, 'Magento\\Catalog\\Api\\Data\\ProductInterface');
     $expectedTableName = 'reviews';
     $this->assertEquals($expectedTableName, $extensionAttributeJoinData->getReferenceTable());
     $this->assertEquals('extension_attribute_review_id', $extensionAttributeJoinData->getReferenceTableAlias());
     $this->assertEquals('product_id', $extensionAttributeJoinData->getReferenceField());
     $this->assertEquals('id', $extensionAttributeJoinData->getJoinField());
     $this->assertEquals([['external_alias' => 'review_id', 'internal_alias' => 'extension_attribute_review_id_db_review_id', 'with_db_prefix' => 'extension_attribute_review_id.db_review_id', 'setter' => 'setReviewId']], $extensionAttributeJoinData->getSelectFields());
 }
 /**
  * JoinDataInterface getter
  *
  * @return JoinDataInterface
  */
 public function getJoinDataInterface()
 {
     return $this->joinDataInterfaceFactory->create();
 }