Je ne suis pas sûr que s'échapper est possible. Lorsque vous ajoutez un filtre d'attribut avec Magento (ce que vous faites ci-dessus), il crée le composant where en utilisant la méthode quoteInto de Zend, puis ajoute la chaîne résultante à un objet Zend Select.
//create a full where clause
//In this case, $conditionSql = IF(_table_name.value_id>0, _table_name.value, _table_name_default.value) = 'What are Tests?'
$conditionSql = $this->_getAttributeConditionSql($attribute, $condition, $joinType);
...
//add that where clause to a Zend select object
$this->getSelect()->where($conditionSql);
Ensuite, lorsque la sélection Zend est converti en une chaîne, il sort comme
IF(_table_name.value_id>0, _table_name.value, _table_name_default.value) = 'Product 7800'''
Le problème est plein, pas paramaterized où est s'ajouter à la sélection. Son coffre-fort puisque _getAttributeConditionSql
utilise la méthode quoteInto
de Zend, mais je suis à peu près sûr que cela signifie que vous êtes coincé si votre clause where a un "?" Marquer là-dedans (heureux d'avoir tort sur ce point) Il est probablement possible de le faire en jouant directement avec le select du modèle de ressource, mais je ne suis pas fan de faire ça avec Magento.
Indépendamment de tout cela, ce qui suit devrait vous permettre de travailler autour de cette
$product = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addFieldToFilter('name',array('like'=>'What are Tests_'))
->getFirstItem();
Le code ci-dessus créer une collection avec une clause where qui utilise le caractère générique de caractère « _ » à la place d'un « ? ", puis arrache le premier article du haut. Pas idéal, mais cela devrait être un travail suffisant.
Cela ressemble à un bug pour moi, je pense que vous devriez le signaler ... – greg0ire