DataSelection and DataSet
These are the fundamental data structures for defining what to migrate. Each DataSelection
consists of one or more DataSets
:
- ProductDataSelection (position: 100)
- MediaFolderDataSet
- ProductAttributeDataSet
- ProductPriceAttributeDataSet
- ManufacturerAttributeDataSet
- ProductDataSet
- PropertyGroupOptionDataSet
- ProductOptionRelationDataSet
- ProductPropertyRelationDataSet
- TranslationDataSet
- CrossSellingDataSet
- MediaDataSelection (position: 300)
- MediaFolderDataSet
- MediaDataSet
The order of the DataSets
in the DataSelection
class is important and specifies the processing order. DataSelection
also holds a position specifying the order applied when migrating (lower numbers are migrated earlier). The getDataSetsRequiredForCount
method returns an array of all DataSets. Its count should be displayed in the Administration.
Please take a look at the DataSelection
example:
<?php declare(strict_types=1);
namespace SwagMigrationAssistant\Profile\Shopware\DataSelection;
use SwagMigrationAssistant\Migration\DataSelection\DataSelectionInterface;
use SwagMigrationAssistant\Migration\DataSelection\DataSelectionStruct;
use SwagMigrationAssistant\Migration\MigrationContextInterface;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\CrossSellingDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ManufacturerAttributeDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\MediaFolderDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductAttributeDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductOptionRelationDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductPriceAttributeDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductPropertyRelationDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\PropertyGroupOptionDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\TranslationDataSet;
use SwagMigrationAssistant\Profile\Shopware\ShopwareProfileInterface;
class ProductDataSelection implements DataSelectionInterface
{
public const IDENTIFIER = 'products';
public function supports(MigrationContextInterface $migrationContext): bool
{
return $migrationContext->getProfile() instanceof ShopwareProfileInterface;
}
public function getData(): DataSelectionStruct
{
return new DataSelectionStruct(
self::IDENTIFIER,
$this->getDataSets(),
$this->getDataSetsRequiredForCount(),
'swag-migration.index.selectDataCard.dataSelection.products', // Snippet name
100, // The position of the dataSelection
true, // Is process-media needed (to download / copy images for example),
DataSelectionStruct::BASIC_DATA_TYPE, // specify the type of data (core data or plugin data)
false // Is the selection required for every migration? (the user can't unselect this data selection)
);
}
public function getDataSets(): array
{
return [
// The order matters!
new MediaFolderDataSet(),
new ProductAttributeDataSet(),
new ProductPriceAttributeDataSet(),
new ManufacturerAttributeDataSet(),
new ProductDataSet(),
new PropertyGroupOptionDataSet(),
new ProductOptionRelationDataSet(),
new ProductPropertyRelationDataSet(),
new TranslationDataSet(),
new CrossSellingDataSet(),
];
}
public function getDataSetsRequiredForCount(): array
{
return [
new ProductDataSet(),
];
}
}
Here's a DataSet
example:
<?php declare(strict_types=1);
namespace SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet;
use SwagMigrationAssistant\Migration\DataSelection\DataSet\DataSet;
use SwagMigrationAssistant\Migration\DataSelection\DefaultEntities;
use SwagMigrationAssistant\Migration\MigrationContextInterface;
use SwagMigrationAssistant\Profile\Shopware\ShopwareProfileInterface;
class ProductDataSet extends DataSet
{
public static function getEntity(): string
{
return DefaultEntities::PRODUCT;
}
public function supports(MigrationContextInterface $migrationContext): bool
{
return $migrationContext->getProfile() instanceof ShopwareProfileInterface;
}
}
The dataSelections
are registered the following way:
<service id="SwagMigrationAssistant\Profile\Shopware\DataSelection\ProductDataSelection">
<tag name="shopware.migration.data_selection"/>
</service>
It is also possible to specify the same DataSets
in multiple DataSelections
(this should only be done if no other options are available). Have a look at the ProductReviewDataSelection
:
<?php declare(strict_types=1);
namespace SwagMigrationAssistant\Profile\Shopware\DataSelection;
use SwagMigrationAssistant\Migration\DataSelection\DataSelectionInterface;
use SwagMigrationAssistant\Migration\DataSelection\DataSelectionStruct;
use SwagMigrationAssistant\Migration\MigrationContextInterface;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\CrossSellingDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\CustomerAttributeDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\CustomerDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ManufacturerAttributeDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\MediaFolderDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductAttributeDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductOptionRelationDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductPriceAttributeDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductPropertyRelationDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\ProductReviewDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\PropertyGroupOptionDataSet;
use SwagMigrationAssistant\Profile\Shopware\DataSelection\DataSet\TranslationDataSet;
use SwagMigrationAssistant\Profile\Shopware\ShopwareProfileInterface;
class ProductReviewDataSelection implements DataSelectionInterface
{
public const IDENTIFIER = 'productReviews';
public function supports(MigrationContextInterface $migrationContext): bool
{
return $migrationContext->getProfile() instanceof ShopwareProfileInterface;
}
public function getData(): DataSelectionStruct
{
return new DataSelectionStruct(
self::IDENTIFIER,
$this->getDataSets(),
$this->getDataSetsRequiredForCount(),
'swag-migration.index.selectDataCard.dataSelection.productReviews',
250,
true
);
}
/**
* {@inheritdoc}
*/
public function getDataSets(): array
{
return [
new MediaFolderDataSet(),
new ProductAttributeDataSet(),
new ProductPriceAttributeDataSet(),
new ManufacturerAttributeDataSet(),
new ProductDataSet(),
new PropertyGroupOptionDataSet(),
new ProductOptionRelationDataSet(),
new ProductPropertyRelationDataSet(),
new TranslationDataSet(),
new CrossSellingDataSet(),
new CustomerAttributeDataSet(),
new CustomerDataSet(),
new ProductReviewDataSet(),
];
}
public function getDataSetsRequiredForCount(): array
{
return [
new ProductReviewDataSet(),
];
}
}
INFO
There are duplicate DataSets from the ProductDataSelection
, because they are also required if the user does not select the product DataSelection
. If the user selects both, this DataSets
will be only migrated once (with their first occurrence).