Я не уверен, что избежать этого возможно. Когда вы добавляете фильтр атрибутов с помощью Magento (что вы делаете выше), он создает компонент where с помощью метода quoteInto Zend, а затем добавляет полученную строку в объект 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);
Затем, когда Zend Select преобразуется в строку, он выглядит как
IF(_table_name.value_id>0, _table_name.value, _table_name_default.value) = 'Product 7800'''
Проблема в полном, а не в параметризации, где добавляется выбор. Это безопасно, поскольку _getAttributeConditionSql
использует метод Zend quoteInto
, но я уверен, что это означает, что вы застряли, если в предложении where есть необработанный "?" отметьте там (рад, что это не так) Возможно, это можно сделать, поигравшись непосредственно с выбором модели ресурса, но я не фанат делать это с Magento.
Независимо от всего этого, следующее должно позволить вам обойти это
$product = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addFieldToFilter('name',array('like'=>'What are Tests_'))
->getFirstItem();
Приведенный выше код создает коллекцию с предложением where, который использует подстановочный знак «_» вместо «?», А затем отбирает первый элемент сверху. Не идеально, но это должно быть достаточным обходом.