Context: How does \Magento\Catalog\Model\Product\Option\Repository::getProductOptions()
work?
<img src="/uploads/default/original/2X/2/25a0a2ef058f102d2f8d054c99d0d0108e6ab9f0.png" width=“153” height=“57”
Details: How does \Magento\Catalog\Model\ResourceModel\Product\Option\Collection::addValuesToResult()
work?
Details: How does \Magento\Framework\Api\ExtensionAttribute\JoinProcessor::process()
work?
$collection->getSelect()->assemble()
SELECT
`main_table`.*
, `default_option_title`.`title` AS `default_title`
, `store_option_title`.`title` AS `store_title`
, IF(
store_option_title.title IS NULL
, default_option_title.title, store_option_title.title
) AS `title`
, `default_option_price`.`price` AS `default_price`
, `default_option_price`.`price_type` AS `default_price_type`
, `store_option_price`.`price` AS `store_price`
, `store_option_price`.`price_type` AS `store_price_type`
, IF(
store_option_price.price IS NULL
, default_option_price.price, store_option_price.price
) AS `price`
, IF(
store_option_price.price_type IS NULL
, default_option_price.price_type, store_option_price.price_type
) AS `price_type`
FROM
`catalog_product_option` AS `main_table`
INNER JOIN
`catalog_product_entity` AS `cpe`
ON cpe.entity_id = main_table.product_id
INNER JOIN
`catalog_product_option_title` AS `default_option_title`
ON default_option_title.option_id = main_table.option_id
LEFT JOIN
`catalog_product_option_title` AS `store_option_title`
ON store_option_title.option_id = main_table.option_id AND store_option_title.store_id = '1'
LEFT JOIN
`catalog_product_option_price` AS `default_option_price`
ON
default_option_price.option_id = main_table.option_id
AND
default_option_price.store_id = 0
LEFT JOIN
`catalog_product_option_price` AS `store_option_price`
ON
store_option_price.option_id = main_table.option_id
AND
store_option_price.store_id = '1'
WHERE
(`cpe`.`entity_id` = '128')
AND
(default_option_title.store_id = 0)
ORDER BY
sort_order ASC, title ASC