-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathMarkRemovedEntitiesQuery.php
98 lines (90 loc) · 3.33 KB
/
MarkRemovedEntitiesQuery.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
/**
* Copyright 2023 Adobe
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe and its suppliers, if any. The intellectual
* and technical concepts contained herein are proprietary to Adobe
* and its suppliers and are protected by all applicable intellectual
* property laws, including trade secret and copyright laws.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe.
*/
declare(strict_types=1);
namespace Magento\ProductVariantDataExporter\Model\Query;
use Magento\DataExporter\Model\Indexer\FeedIndexMetadata;
use Magento\Framework\App\ResourceConnection;
use Magento\Framework\DB\Select;
use Magento\DataExporter\Model\Query\MarkRemovedEntitiesQuery as DefaultMarkRemovedEntitiesQuery;
use Magento\Framework\Exception\LocalizedException;
/**
* Mark removed entities select query provider
*/
class MarkRemovedEntitiesQuery extends DefaultMarkRemovedEntitiesQuery
{
/**
* @var ResourceConnection
*/
private ResourceConnection $resourceConnection;
/**
* @param ResourceConnection $resourceConnection
*/
public function __construct(ResourceConnection $resourceConnection)
{
$this->resourceConnection = $resourceConnection;
parent::__construct($resourceConnection);
}
/**
* Get select query for marking removed entities
*
* @param array $ids
* @param FeedIndexMetadata $metadata
*
* @return Select
* @throws LocalizedException
*/
public function getQuery(array $ids, FeedIndexMetadata $metadata): Select
{
$fieldName = $metadata->getSourceTableField();
$connection = $this->resourceConnection->getConnection();
$catalogProductTable = $this->resourceConnection->getTableName($metadata->getSourceTableName());
$productEntityJoinField = $connection->getAutoIncrementField($catalogProductTable);
return $connection->select()
->from(
['f' => $this->resourceConnection->getTableName($metadata->getFeedTableName())]
)
->joinLeft(
['removed_product' => $catalogProductTable],
\sprintf('f.product_id = removed_product.%s', $fieldName),
[]
)
->joinLeft(
['parent' => $catalogProductTable],
'f.parent_id = parent.entity_id',
[]
)
->joinLeft(
['link' => $this->resourceConnection->getTableName('catalog_product_super_link')],
\sprintf('link.product_id = f.product_id AND link.parent_id = parent.%s', $productEntityJoinField),
[]
)
->joinLeft(
['unassigned_product' => $catalogProductTable],
\sprintf(
'unassigned_product.%s = link.parent_id and unassigned_product.%s = f.parent_id',
$productEntityJoinField,
$fieldName
),
[]
)
->where('f.product_id IN (?)', $ids)
->where(
\sprintf(
'removed_product.entity_id IS NULL
OR unassigned_product.entity_id IS NULL'
)
);
}
}