Skip to content


The Writer objects will get the converted data from the swag_migration_data table and write it to the right Shopware 6 table. Each Writer supports only one entity, that is most likely the target table.

When creating a writer, register it in a manner resembling the following:

<service id="SwagMigrationAssistant\Migration\Writer\ProductWriter"
    <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Write\EntityWriter"/>
    <argument type="service" id="Shopware\Core\Content\Product\ProductDefinition"/>
    <tag name="shopware.migration.writer"/>

In most cases you should extend by the AbstractWriter which does most things for you (you only need to specify the supports method).

<?php declare(strict_types=1);

namespace SwagMigrationAssistant\Migration\Writer;

use SwagMigrationAssistant\Migration\DataSelection\DefaultEntities;

class ProductWriter extends AbstractWriter
    public function supports(): string
        return DefaultEntities::PRODUCT;

In case you need more control over the writing, you can implement the WriterInterface by yourself and the class will receive the data in the writeData method. Received data is an array of converted values. The amount depends on the limit of the request. Error handling is already done in the overlying MigrationDataWriter class. If writing the entries fails with a WriteException from the DAL, it will try to exclude the reported failures and try again. If any other exception occurs, it will retry them one by one to minimize data loss.