I currently have this model in Magento:
$model = Mage::getModel('catalog/product')->getCollection();
$model->addAttributeToFilter(
array(
array( // AND
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
),
array('attribute'=> 'otherattribute','like' => '5'),
)
);
Accoarding to tutorials, this should return this SQL statement (the desired result):
SELECT ... WHERE ((someattribute LIKE 'value' AND otherattribute LIKE 'value') OR (anotherattribute LIKE '5'));
But instead, Magento returns this:
Notice: Undefined index: attribute in .../Mage/Eav/Model/Entity/Collection/Abstract.php on line 314
When I remove the first array, it does return an SQL statement, but instead of doing the SQL query as intended, it returns this:
SELECT ... WHERE ((someAttribute LIKE 'value') OR (otherattribute LIKE 'value'));
It seems to compleatly drop the third value (which is logical if the first statement would be correct).
Does anyone know what I do wrong here?
include_once 'abstract.php';
class A extends Mage_Shell_Abstract {
public function run() {
$col = Mage::getModel('catalog/product')->getCollection();
$col->addAttributeToFilter(array(
array(
'attribute' => 'sku',
'like' => '%ch%'),
array(
'attribute' => 'status',
'eq' => '1')
));
$col->addAttributeToFilter('name', array('like' => 'dsw'));
return $col->getSelect()->__toString();
}
}
$test = new A();
echo $test->run();And the output:
SELECT `e`.*, `at_status`.`value` AS `status`, `at_name`.`value` AS `name` FROM `sl_catalog_product_entity` AS `e` INNER JOIN `sl_catalog_product_entity_int` AS `at_status` ON (`at_status`.`entity_id` = `e`.`entity_id`) AND (`at_status`.`attribute_id` = '96') AND (`at_status`.`store_id` = 0) INNER JOIN `sl_catalog_product_entity_varchar` AS `at_name` ON (`at_name`.`entity_id` = `e`.`entity_id`) AND (`at_name`.`attribute_id` = '71') AND (`at_name`.`store_id` = 0) WHERE ((`e`.`sku` LIKE '%ch%') OR (at_status.value = '1')) AND (at_name.value LIKE 'dsw')
Unfortunatelly there is no built-in method to mix conditions in order (X and Y) or Z