Magento addAttributeToFilter问题
大家好,我有一个 magento 网站,它使用类别作为人们的礼品清单。每个类别都有一个 list_holder_1 和 list_holder_2 属性。
我创建了一个表单,用户可以使用每个属性的文本框搜索 giflist(类别)。
我正在将 getModell..getCollection() 方法与 addAttributeToFilter 一起使用,原因类似,但我得到了奇怪的结果。
这是我的代码。
<?php $list_holder_1 = $_POST['list_holder_1']; ?>
<?php $list_holder_2 = $_POST['list_holder_2']; ?>
<?php $_collection = Mage::getModel('catalog/category')->getCollection();
$_collection->addAttributeToSelect('*');
$_collection->addAttributeToFilter(
array(
array('attribute'=>'list_holder_1', 'like'=>'%'.$list_holder_1.'%'),
array('attribute'=>'list_holder_1', 'like'=>'%'.$list_holder_2.'%'),
));
$_collection->addAttributeToFilter(
array(
array('attribute'=>'list_holder_2', 'like'=>'%'.$list_holder_1.'%'),
array('attribute'=>'list_holder_2', 'like'=>'%'.$list_holder_2.'%'),
));
echo $_collection->getSelect();
?>
用户应该能够在任一文本框中搜索每个名称。因此,我的查询以这样的 where 子句结束:
我只添加了一个名称是一个框 - 'Hill'
WHERE (e.entity_type_id = '3') AND ((_table_list_holder_1.value like '%Hill%') OR (_table_list_holder_1.value like '%%')) AND ((_table_list_holder_2.value like '%Hill%') OR (_table_list_holder_2.value like '%%'))
正如您所看到的,它正在检查两个字段中的空白值。由于某种原因,它撤出了所有类别。即使只有 1 个 list_holder_1 值为“Hill”。
有人知道我哪里出了问题吗?
问候, 比利
Hi I have a magento site that uses categories as giftlists for people. Each category has a list_holder_1 and list_holder_2 attribute.
I've created a form that users can search for giflists (categories) with a textbox for each attribute.
I'm using the getModell..getCollection() method with addAttributeToFilter with like causes but I'm getting odd results.
Here is my code..
<?php $list_holder_1 = $_POST['list_holder_1']; ?>
<?php $list_holder_2 = $_POST['list_holder_2']; ?>
<?php $_collection = Mage::getModel('catalog/category')->getCollection();
$_collection->addAttributeToSelect('*');
$_collection->addAttributeToFilter(
array(
array('attribute'=>'list_holder_1', 'like'=>'%'.$list_holder_1.'%'),
array('attribute'=>'list_holder_1', 'like'=>'%'.$list_holder_2.'%'),
));
$_collection->addAttributeToFilter(
array(
array('attribute'=>'list_holder_2', 'like'=>'%'.$list_holder_1.'%'),
array('attribute'=>'list_holder_2', 'like'=>'%'.$list_holder_2.'%'),
));
echo $_collection->getSelect();
?>
The user should be able to search for each name in either textbox. So my query ends up with a where clause like this:
I have only added one name is one box - 'Hill'
WHERE (e.entity_type_id = '3') AND ((_table_list_holder_1.value like '%Hill%') OR (_table_list_holder_1.value like '%%')) AND ((_table_list_holder_2.value like '%Hill%') OR (_table_list_holder_2.value like '%%'))
As you can see it's checking for a blank value in both fields. And for some reason it's pulling out every category. Even though only 1 has the list_holder_1 value of 'Hill'.
Anyone any clue as to where I've gone wrong?
Regards,
Billy
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
%
是通配符,因此'%%'
匹配所有值。如果您想匹配精确值,请不要使用like
和%
,而是使用eq
。%
is a wildcard so'%%'
is matching all values. If you want to match exact values don't uselike
and%
, useeq
instead.