0

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

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

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

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

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

但我的计划是必须让产品名称以字母 ' h' 开头。

有任何想法吗 ?

4

1 回答 1

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。

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

于 2013-11-12T08:37:33.423 回答