【问题标题】:Get Products in magento By Starting letter/string of a product name通过产品名称的起始字母/字符串获取 magento 中的产品
【发布时间】:2013-11-12 05:45:44
【问题描述】:

我遇到了无法解决的问题。部分原因是我无法用正确的术语来解释它。我是新手,很抱歉这个笨拙的问题。

您可以在下面看到我的目标概览。

在我的自定义模块中,我编写了这样的代码

<?php 
    $userId=Mage::getSingleton('customer/session')->getCustomer()->getId();
    $collection = Mage::getResourceModel('partners/userdata');
    $collection->getSelect()->where('userid ='.$userId );
?>

使用这个我得到当前登录客户的所有产品。

但我的计划是让产品名称以字母“h”开头。

有什么想法吗?

【问题讨论】:

标签: php magento


【解决方案1】:

您应该尽量避免在集合类方法之外使用 getSelect。您应该使用集合过滤器而不是 getSelect,如下所示:

$collection = Mage::getModel('partners/userdata')->getCollection();
$collection->addFieldToFilter('userid', $userId);

它将防止 SQL 注入,并用正确的引号包裹值。有很多不同的条件操作可用,都在这里列出 - http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-8-varien-data-collections,“其他比较运算符”部分 .

在您的情况下,您需要使用产品收集和操作'like'

$collection->addFieldToFilter('name', array('like' => 'h%'));

但产品系列有一个棘手的问题。产品模型实现 EAV 模型,这意味着产品本身就是实体(就 magento 而言),并且它的所有字段都是属性(因此它以特定方式存储并以不同方式处理),因此对于产品集合,您应该使用 addAttributeToFilter,而不是添加字段到过滤器。所以完整的代码如下所示:

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('name', array('like' => 'h%'));

似乎很困惑,因为它与 Magento ORM 实现有关,我在其他产品/框架中从未见过这样的东西。因此,为简化起见,您始终可以使用 addAttributeToFilter,如果出现错误提示方法不存在,请将其替换为 addFieldToFilter。

如果您需要一些核心实现中不可用的条件,或者它只是在您的代码中经常使用,您可以定义额外的收集方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2017-03-30
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多