Tried filtering with option_id and value_id but it is looking for value and when I change it to catalog_product_entity_int.value_id or at_manufacturer.value_id it returns syntax error.

Trying to filter with code

$productcollection = $this->collectionFactory->create()->addAttributeToSelect('manufacturer')->addFieldToFilter('something here',['eq'=>'value id or option_id here']);


query looks like that when debugging

SELECT `e`.*, `at_manufacturer`.`value` AS `manufacturer` FROM `catalog_product_entity` AS `e`
 INNER JOIN `catalog_product_entity_int` AS `at_manufacturer` ON (`at_manufacturer`.`entity_id` = `e`.`entity_id`) AND (`at_manufacturer`.`attribute_id` = '81') AND (`at_manufacturer`.`store_id` = 0) WHERE (at_manufacturer.value = 'LG')

How to filter that properly?

  • What is the error message? – Adarsh Khatri Apr 14 at 0:49
  • when I use manufacturer as a first argument it's not filtering right. when I use main_table.value_id it returns syntax error. – Giga Todadze Apr 14 at 7:22

Instead of LG, you should provide it's id. I am not sure how you are using this collection but you should be able to do this if you know your manufacturer option id:

//collectionFactory = \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
$productcollection = $this->collectionFactory->create()
   ->addFieldToFilter('manufacturer',['eq'=>'21']); //value

This create sql like this:

SELECT `e`.*, `at_manufacturer`.`value` AS `manufacturer` FROM `catalog_product_entity` AS `e`
   LEFT JOIN `catalog_product_entity_int` AS `at_manufacturer` ON (`at_manufacturer`.`row_id` = `e`.`row_id`) AND (`at_manufacturer`.`attribute_id` = '81') AND (`at_manufacturer`.`store_id` = 0) WHERE ((at_manufacturer.value = '21')) AND (e.created_in <= 1) AND (e.updated_in > 1)

Hope this helps.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.