Extend symfony SQL statement
In each Pacemaker To customize this SQL statement with the new Magento field, you need to customize the Symfony DI configuration and override the original service. Pacemaker entity types:
|
Example
Example how to extend the services.xml
with custom SqlStatements
<?php
/**
* Copyright (c) 2023 TechDivision GmbH
* All rights reserved
*
* This product includes proprietary software developed at TechDivision GmbH, Germany
* For more information see https://www.techdivision.com/
*
* To obtain a valid license for using this software please contact us at
* license@techdivision.com
*/
declare(strict_types=1);
namespace Vendor\Module\Attribute\Repositories;
use TechDivision\Import\Attribute\Utils\SqlStatementKeys;
/**
* @copyright Copyright (c) 2023 TechDivision GmbH (https://www.techdivision.com)
* @author TechDivision Team MET <met@techdivision.com>
* @link https://www.techdivision.com/
* @codingStandardsIgnoreStart
*/
class SqlStatementRepository extends \TechDivision\Import\Repositories\SqlStatementRepository (1)
{
/**
* The SQL statements.
*
* @var array
*/
private $statements = array(
SqlStatementKeys::ATTRIBUTE =>
'SELECT * FROM ${table:eav_attribute} WHERE attribute_id = :attribute_id',
SqlStatementKeys::CATALOG_ATTRIBUTE =>
'SELECT attribute_id,
frontend_input_renderer,
is_global,
is_visible,
is_searchable,
is_filterable,
is_comparable,
is_visible_on_front,
is_html_allowed_on_front,
is_used_for_price_rules,
is_filterable_in_search,
used_in_product_listing,
used_for_sort_by,
apply_to,
is_visible_in_advanced_search,
position,
is_wysiwyg_enabled,
is_used_for_promo_rules,
is_required_in_admin_store,
is_used_in_grid,
is_visible_in_grid,
is_filterable_in_grid,
search_weight,
additional_data
FROM ${table:catalog_eav_attribute}
WHERE attribute_id = :attribute_id',
SqlStatementKeys::ATTRIBUTE_BY_ENTITY_TYPE_ID_AND_ATTRIBUTE_CODE =>
'SELECT *
FROM ${table:eav_attribute}
WHERE entity_type_id = :entity_type_id
AND attribute_code = :attribute_code',
SqlStatementKeys::ATTRIBUTE_LABEL_BY_ENTITY_TYPE_ID_AND_ATTRIBUTE_CODE_AND_STORE_ID =>
'SELECT t1.*
FROM ${table:eav_attribute_label} t1,
${table:eav_attribute} t2
WHERE t2.attribute_code = :attribute_code
AND t2.entity_type_id = :entity_type_id
AND t1.attribute_id = t2.attribute_id
AND t1.store_id = :store_id',
SqlStatementKeys::ATTRIBUTE_OPTION_BY_ENTITY_TYPE_ID_AND_ATTRIBUTE_CODE_AND_STORE_ID_AND_VALUE =>
'SELECT t2.*
FROM ${table:eav_attribute} t1,
${table:eav_attribute_option} t2,
${table:eav_attribute_option_value} t3
WHERE t1.attribute_code = :attribute_code
AND t1.entity_type_id = :entity_type_id
AND t3.store_id = :store_id
AND t3.value = BINARY :value
AND t2.attribute_id = t1.attribute_id
AND t2.option_id = t3.option_id',
SqlStatementKeys::ATTRIBUTE_OPTION_BY_ENTITY_TYPE_ID_AND_ATTRIBUTE_CODE_AND_STORE_ID_AND_SWATCH_AND_TYPE =>
'SELECT t2.*
FROM ${table:eav_attribute} t1,
${table:eav_attribute_option} t2,
${table:eav_attribute_option_swatch} t3
WHERE t1.attribute_code = :attribute_code
AND t1.entity_type_id = :entity_type_id
AND t3.store_id = :store_id
AND t3.value = BINARY :value
AND t3.type = :type
AND t2.attribute_id = t1.attribute_id
AND t2.option_id = t3.option_id',
SqlStatementKeys::ATTRIBUTE_OPTION_SWATCH_BY_OPTION_ID_AND_STORE_ID =>
'SELECT t1.*
FROM ${table:eav_attribute_option_swatch} t1
WHERE t1.store_id = :store_id
AND t1.option_id = :option_id',
SqlStatementKeys::CATALOG_ATTRIBUTE_BY_ATTRIBUTE_CODE_AND_ENTITY_TYPE_ID =>
'SELECT t2.*
FROM ${table:eav_attribute} t1
INNER JOIN ${table:catalog_eav_attribute} t2
WHERE t1.attribute_code = :attribute_code
AND t1.entity_type_id = :entity_type_id
AND t2.attribute_id = t1.attribute_id',
SqlStatementKeys::ENTITY_ATTRIBUTE_BY_ENTITY_TYPE_ID_AND_ATTRIBUTE_ID_AND_ATTRIBUTE_SET_ID_AND_ATTRIBUTE_GROUP_ID =>
'SELECT *
FROM ${table:eav_entity_attribute}
WHERE entity_type_id = :entity_type_id
AND attribute_id = :attribute_id
AND attribute_set_id = :attribute_set_id
AND attribute_group_id = :attribute_group_id',
SqlStatementKeys::ENTITY_ATTRIBUTE_BY_ATTRIBUTE_ID_AND_ATTRIBUTE_SET_ID =>
'SELECT *
FROM ${table:eav_entity_attribute}
WHERE attribute_id = :attribute_id
AND attribute_set_id = :attribute_set_id',
SqlStatementKeys::ATTRIBUTE_OPTION_SWATCH_BY_ENTITY_TYPE_ID_AND_ATTRIBUTE_CODE_AND_STORE_ID_AND_VALUE_AND_TYPE=>
'SELECT t3.*
FROM ${table:eav_attribute} t1,
${table:eav_attribute_option} t2,
${table:eav_attribute_option_swatch} t3
WHERE t1.attribute_code = :attribute_code
AND t1.entity_type_id = :entity_type_id
AND t3.store_id = :store_id
AND t3.value = BINARY :value
AND t3.type = :type
AND t2.attribute_id = t1.attribute_id
AND t2.option_id = t3.option_id',
SqlStatementKeys::ATTRIBUTE_OPTION_BY_ATTRIBUTE_ID_ORDER_BY_SORT_ORDER_DESC =>
'SELECT *
FROM ${table:eav_attribute_option}
WHERE attribute_id = :attribute_id
ORDER BY sort_order DESC',
SqlStatementKeys::CREATE_ATTRIBUTE =>
'INSERT
INTO ${table:eav_attribute}
(entity_type_id,
attribute_code,
attribute_model,
backend_model,
backend_type,
backend_table,
frontend_model,
frontend_input,
frontend_label,
frontend_class,
source_model,
is_required,
is_user_defined,
default_value,
is_unique,
note,
new_magento_field)(2)
VALUES (:entity_type_id,
:attribute_code,
:attribute_model,
:backend_model,
:backend_type,
:backend_table,
:frontend_model,
:frontend_input,
:frontend_label,
:frontend_class,
:source_model,
:is_required,
:is_user_defined,
:default_value,
:is_unique,
:note,
:new_magento_field)' ,
SqlStatementKeys::CREATE_ENTITY_ATTRIBUTE =>
'INSERT
INTO ${table:eav_entity_attribute}
(entity_type_id,
attribute_id,
attribute_set_id,
attribute_group_id,
sort_order)
VALUES (:entity_type_id,
:attribute_id,
:attribute_set_id,
:attribute_group_id,
:sort_order)',
SqlStatementKeys::CREATE_ATTRIBUTE_LABEL =>
'INSERT
INTO ${table:eav_attribute_label}
(attribute_id,
store_id,
value)
VALUES (:attribute_id,
:store_id,
:value)',
SqlStatementKeys::CREATE_ATTRIBUTE_OPTION =>
'INSERT ${table:eav_attribute_option}
(${column-names:eav_attribute_option})
VALUES (${column-placeholders:eav_attribute_option})',
SqlStatementKeys::CREATE_ATTRIBUTE_OPTION_VALUE =>
'INSERT
INTO ${table:eav_attribute_option_value}
(option_id,
store_id,
value)
VALUES (:option_id,
:store_id,
:value)',
SqlStatementKeys::CREATE_ATTRIBUTE_OPTION_SWATCH =>
'INSERT
INTO ${table:eav_attribute_option_swatch}
(option_id,
store_id,
value,
type)
VALUES (:option_id,
:store_id,
:value,
:type)',
SqlStatementKeys::CREATE_CATALOG_ATTRIBUTE =>
'INSERT INTO ${table:catalog_eav_attribute} (%s) VALUES (:%s)',
SqlStatementKeys::UPDATE_ATTRIBUTE =>
'UPDATE ${table:eav_attribute}
SET entity_type_id = :entity_type_id,
attribute_code = :attribute_code,
attribute_model = :attribute_model,
backend_model = :backend_model,
backend_type = :backend_type,
backend_table = :backend_table,
frontend_model = :frontend_model,
frontend_input = :frontend_input,
frontend_label = :frontend_label,
frontend_class = :frontend_class,
source_model = :source_model,
is_required = :is_required,
is_user_defined = :is_user_defined,
default_value = :default_value,
is_unique = :is_unique,
note = :note,
new_magento_field = :new_magento_field (3)
WHERE attribute_id = :attribute_id',
SqlStatementKeys::UPDATE_CATALOG_ATTRIBUTE =>
'UPDATE ${table:catalog_eav_attribute} SET %s WHERE attribute_id = :%s',
SqlStatementKeys::UPDATE_ENTITY_ATTRIBUTE =>
'UPDATE ${table:eav_entity_attribute}
SET entity_type_id = :entity_type_id,
attribute_id = :attribute_id,
attribute_set_id = :attribute_set_id,
attribute_group_id = :attribute_group_id,
sort_order = :sort_order
WHERE entity_attribute_id = :entity_attribute_id',
SqlStatementKeys::UPDATE_ATTRIBUTE_LABEL =>
'UPDATE ${table:eav_attribute_label}
SET attribute_id = :attribute_id,
store_id = :store_id,
value = :value
WHERE attribute_label_id = :attribute_label_id',
SqlStatementKeys::UPDATE_ATTRIBUTE_OPTION =>
'UPDATE ${table:eav_attribute_option}
SET ${column-values:eav_attribute_option}
WHERE option_id = :option_id',
SqlStatementKeys::UPDATE_ATTRIBUTE_OPTION_VALUE =>
'UPDATE ${table:eav_attribute_option_value}
SET option_id = :option_id,
store_id = :store_id,
value = :value
WHERE value_id = :value_id',
SqlStatementKeys::UPDATE_ATTRIBUTE_OPTION_SWATCH =>
'UPDATE ${table:eav_attribute_option_swatch}
SET option_id = :option_id,
store_id = :store_id,
value = :value,
type = :type
WHERE swatch_id = :swatch_id',
SqlStatementKeys::DELETE_ATTRIBUTE =>
'DELETE FROM ${table:eav_attribute} WHERE attribute_id = :attribute_id',
SqlStatementKeys::DELETE_ENTITY_ATTRIBUTE =>
'DELETE FROM ${table:eav_entity_attribute} WHERE entity_attribute_id = :entity_attribute_id',
SqlStatementKeys::DELETE_ATTRIBUTE_LABEL =>
'DELETE FROM ${table:eav_attribute_label} WHERE attribute_label_id = :attribute_label_id',
SqlStatementKeys::DELETE_ATTRIBUTE_OPTION =>
'DELETE FROM ${table:eav_attribute_option} WHERE option_id = :option_id',
SqlStatementKeys::DELETE_ATTRIBUTE_OPTION_VALUE =>
'DELETE FROM ${table:eav_attribute_option_value} WHERE value_id = :value_id',
SqlStatementKeys::DELETE_ATTRIBUTE_OPTION_SWATCH =>
'DELETE FROM ${table:eav_attribute_option_swatch} WHERE swatch_id = :swatch_id',
SqlStatementKeys::DELETE_CATALOG_ATTRIBUTE =>
'DELETE FROM ${table:catalog_eav_attribute} WHERE attribute_id = :attribute_id',
SqlStatementKeys::DELETE_ATTRIBUTE_BY_ATTRIBUTE_CODE =>
'DELETE FROM ${table:eav_attribute} WHERE attribute_code = :attribute_code'
);
/**
* @param \IteratorAggregate $compilers
*/
public function __construct(\IteratorAggregate $compilers)
{
// pass primary key + table prefix utility to parent instance
parent::__construct($compilers);
// compile the SQL statements
$this->compile($this->statements);
}
}
1 | Custom Class with the new field new_magento_field extend the parent SqlStatementRepository |
2 | The new field new_magento_field used for insert statement |
3 | The new field new_magento_field used for update statement |
<service id="import_attribute.repository.sql.statement" class="TechDivision\Import\Attribute\Repositories\SqlStatementRepository">(1)
<argument type="service" id="import.util.sql.compilers"/>(2)
</service>
1 | The original definition of service |
2 | The original argument |
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="import_attribute.repository.sql.statement" class="Vendor\Module\Attribute\Repositories\SqlStatementRepository">(1)
<argument type="service" id="import.util.sql.compilers"/>(2)
</service>
</services>
</container>
1 | The service definition of the custom repository |
2 | The original argument, if the new argument they have declared is in the right order. |