Magento addAttributeToFilter问题

发布于 2024-11-06 17:13:29 字数 1490 浏览 1 评论 0原文

大家好,我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╰ゝ天使的微笑 2024-11-13 17:13:29

% 是通配符,因此 '%%' 匹配所有值。如果您想匹配精确值,请不要使用 like%,而是使用 eq

% is a wildcard so '%%' is matching all values. If you want to match exact values don't use like and %, use eq instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文