0

我正在尝试将一些项目添加到自定义创建的集合中。阅读Alan Storm varien data collection和这个SO question我有几个不同的选择。

这是使用 Varien_Data_Collection 的一个选项:

    $myResultCollection = new Varien_Data_Collection();
    $mybanner = new Varien_Object();
    foreach($myBannersCollection as $banner){
        $mybanner = $banner;
        $search_text = explode(",", $banner->getsearch_text());
        foreach ($search_text as $txt){
            if (stripos($currentProdName,$txt) !== false) {
                $myResultCollection->addItem($mybanner);
            }
        }
    }

此代码引发以下错误:

Item (Dts_Banners_Model_Bannersadmin) with the same id "10" already exist

这是代码的另一个变体,使用我当前使用的模型中的自定义集合:

    $myResultCollection = Mage::getModel('banners/bannersadmin');
    foreach($myBannersCollection as $banner){
        $search_text = explode(",", $banner->getsearch_text());
        foreach ($search_text as $txt){
            if (stripos($currentProdName,$txt) !== false) {
                $myResultCollection->addItem($banner);
            }
        }
    }

但是这个显示了以下错误(没有显示所有内容,太长了):

Invalid method Dts_Banners_Model_Bannersadmin::addItem(Array
(
    [0] => Dts_Banners_Model_Bannersadmin Object
        (
            [_eventPrefix:protected] => core_abstract
            [_eventObject:protected] => object
            [_resourceName:protected] => banners/bannersadmin
            [_resource:protected] => 
            [_resourceCollectionName:protected] => banners/bannersadmin_collection
            [_cacheTag:protected] => 
            [_dataSaveAllowed:protected] => 1
            [_isObjectNew:protected] => 
            .......

我做错了什么?

4

2 回答 2

2

问题 #1:添加到Varien_Data_Collection实例中的项目需要在集合的上下文中具有不同的 ID。

问题 #2: Dts_Banners_Model_Bannersadmin不是Varien_Data_Collection.

于 2012-11-30T13:21:22.500 回答
0

发现错误。在里面,for..each我试图多次添加相同的对象,并且由于 ID 被重复,错误是正确的。正确代码如下:

$myResultCollection = new Varien_Data_Collection();
$mybanner = new Varien_Object();
$found = false;
foreach($myBannersCollection as $banner){
    $mybanner = $banner;
    $search_text = explode(",", $banner->getsearch_text());
    foreach ($search_text as $txt){
        if (stripos($currentProdName,$txt) !== false) {
            $mybanner = $banner;
            $myResultCollection->addItem($mybanner);
            $found = true;
        }
        if ($found) break;
    }
}

编辑 @benmarks 你对我的第一个片段的回答是正确的,正如我在 asnwer 上评论的那样。但在第二个我不太确定。在 Magento 中,不是所有的集合都“继承”了基本的 Varien_Data_Collection?

于 2012-11-30T13:25:16.080 回答