![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-catalog/Model/ResourceModel/Product/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Catalog\Model\ResourceModel\Product; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Framework\DB\Query\Generator; use Magento\Framework\DB\Select; use Magento\Framework\App\ResourceConnection; /** * Class for retrieval of all product images */ class Image { /** * @var AdapterInterface */ private $connection; /** * @var Generator */ private $batchQueryGenerator; /** * @var ResourceConnection */ private $resourceConnection; /** * @var int */ private $batchSize; /** * @param Generator $generator * @param ResourceConnection $resourceConnection * @param int $batchSize */ public function __construct( Generator $generator, ResourceConnection $resourceConnection, $batchSize = 100 ) { $this->batchQueryGenerator = $generator; $this->resourceConnection = $resourceConnection; $this->connection = $this->resourceConnection->getConnection(); $this->batchSize = $batchSize; } /** * Get all product images. * * @return \Generator */ public function getAllProductImages(): \Generator { $batchSelectIterator = $this->batchQueryGenerator->generate( 'value_id', $this->getVisibleImagesSelect(), $this->batchSize, \Magento\Framework\DB\Query\BatchIteratorInterface::NON_UNIQUE_FIELD_ITERATOR ); foreach ($batchSelectIterator as $select) { foreach ($this->connection->fetchAll($select) as $key => $value) { yield $key => $value; } } } /** * Get used product images. * * @return \Generator */ public function getUsedProductImages(): \Generator { $batchSelectIterator = $this->batchQueryGenerator->generate( 'value_id', $this->getUsedImagesSelect(), $this->batchSize, \Magento\Framework\DB\Query\BatchIteratorInterface::NON_UNIQUE_FIELD_ITERATOR ); foreach ($batchSelectIterator as $select) { foreach ($this->connection->fetchAll($select) as $key => $value) { yield $key => $value; } } } /** * Get the number of unique images of products. * * @return int */ public function getCountAllProductImages(): int { $select = $this->getVisibleImagesSelect() ->reset('columns') ->reset('distinct') ->columns( new \Zend_Db_Expr('count(distinct value)') ); return (int) $this->connection->fetchOne($select); } /** * Get the number of unique and used images of products. * * @return int */ public function getCountUsedProductImages(): int { $select = $this->getUsedImagesSelect() ->reset('columns') ->reset('distinct') ->columns( new \Zend_Db_Expr('count(distinct value)') ); return (int) $this->connection->fetchOne($select); } /** * Return select to fetch all products images. * * @return Select */ private function getVisibleImagesSelect(): Select { return $this->connection->select()->distinct() ->from( ['images' => $this->resourceConnection->getTableName(Gallery::GALLERY_TABLE)], 'value as filepath' )->where( 'disabled = 0' ); } /** * Return select to fetch all used product images. * * @return Select */ private function getUsedImagesSelect(): Select { return $this->connection->select()->distinct() ->from( ['images' => $this->resourceConnection->getTableName(Gallery::GALLERY_TABLE)], 'value as filepath' )->joinInner( ['image_value' => $this->resourceConnection->getTableName(Gallery::GALLERY_VALUE_TABLE)], 'images.value_id = image_value.value_id', [] )->where( 'images.disabled = 0 AND image_value.disabled = 0' ); } }