Me he quedado atrapado en esto durante las últimas horas. Lo conseguí trabajando pirateando unas pocas líneas en /lib/Varien/Data/Collection/Db.php
, pero prefiero usar la solución adecuada y dejar mi núcleo intacto.Magento addFieldToFilter: Dos campos coinciden como OR, no Y
Todo lo que necesito hacer es obtener una colección y filtrarla por dos o más campos. Diga, customer_firstname
y remote_ip
. Aquí está mi (disfuncional y sin piratería Db.php
) Código:
$collection = Mage::getModel('sales/order')->getCollection()->
addAttributeToSelect("*")->
addFieldToFilter(array(array('remote_ip', array('eq'=>'127.0.0.1')),
array('customer_firstname', array('eq'=>'gabe'))), array('eq'=>array(1,2,3)));
Con una acción Db.php
, he intentado esto: (muestra tomada de http://magentoexpert.blogspot.com/2009/12/retrieve-products-with-specific.html)
$collection->addFieldToFilter(array(
array('name'=>'orig_price','eq'=>'Widget A'),
array('name'=>'orig_price','eq'=>'Widget B'),
));
Pero eso me da este error:
Warning: Illegal offset type in isset or empty in magento/lib/Varien/Data/Collection/Db.php on line 369
Si envuelvo eso con un try/catch, se mueve a _getConditionSql() y da este error:
Warning: Invalid argument supplied for foreach() in magento/lib/Varien/Data/Collection/Db.php on line 412
¿Alguien tiene un código funcional y operativo para hacer esto? Estoy ejecutando Magento 1.9 (Enterprise). ¡Gracias!
Gracias, Anda. Pero eso es para requerir ambos campos, no uno u otro. Si agrega -> getSelectSql() al final de esa consulta, le da "... WHERE (my_field1 = 'my_value1') Y (my_field2 = 'my_value2')". Es el "DONDE (myfield1 = 'myvalue1') O (myfield2 = 'myvalue2')" que estoy tratando de obtener. –
He entendido mal tu publicación :); He agregado el código para O –
Esto solo funciona con addAttributeToFilter en colecciones de EAV. La respuesta de Riyazkhan es la correcta. – rterrani