在这种情况下如何使用getCollection()

时间:2014-05-30 10:05:12

标签: php magento collections module resources

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

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

我正在使用Magento CE 1.7.0.2。

我创建了一个模块,一切正常,但我遇到了getCollection()的问题。

$attrid = 64;
$collection = Mage::getModel('module/xyz')->getCollection()->addFieldToFilter('c_id',$attrid);

如果我在表格中只有一条记录where c_id = $attrid

,它就可以了

但实际上where c_id = $attrid我当时会有多条记录,会发出以下错误

a:5:{i:0;s:74:"Item (Namespace_Module_Model_Xyz) with the same id "64" already exist";i:1;s:6099:"#0 /var/www/com2/lib/Varien/Data/Collection/Db.php(576): Varien_Data_Collection->addItem(Object(Namespace_Module_Model_Xyz))

我也试过这个

$collection->addFieldToFilter(array(
    ->addFieldToFilter('c_id', array('eq'=>$attrid)
));

表1 (c_id是主键)

c_id    title    value
-----   -----    -----
 64      my       1

表2 (autoc_id是主键)

autoc_id     c1      c2     c3      c4      c-id
--------    ----    ----   ----    ----     ----
1           a1       b1     c1      d1      64
2           a2       b2     c2      d2      64
3           a3       b3     c3      d3      64
4           a4       b4     c4      d4      64

config.xml中

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Module>
            <version>0.1.0</version>
        </Namespace_Module>
    </modules>
    <frontend>
        <routers>
            <module>
                <use>standard</use>
                <args>
                    <module>Namespace_Module</module>
                    <frontName>module</frontName>
                </args>
            </module>
        </routers>
        <layout>
            <updates>
                <module>
                    <file>module.xml</file>
                </module>
            </updates>
        </layout>
    </frontend>
    <admin>
        <routers>
            <module>
                <use>admin</use>
                <args>
                    <module>Namespace_Module</module>
                    <frontName>module</frontName>
                </args>
            </module>
        </routers>
    </admin>
    <adminhtml>
        <menu>
            <module module="module">
                <title>Title</title>
                <sort_order>71</sort_order>               
                <children>
                    <items module="module">
                        <title>title2</title>
                        <sort_order>0</sort_order>
                        <action>module/adminhtml_module</action>
                    </items>
                </children>
            </module>
        </menu>
        <acl>
            <resources>
                <all>
                    <title>Allow Everything</title>
                </all>
                <admin>
                    <children>
                        <Namespace_Module>
                            <title>Title Module</title>
                            <sort_order>10</sort_order>
                        </Namespace_Module>
                    </children>
                </admin>
            </resources>
        </acl>
        <layout>
            <updates>
                <module>
                    <file>module.xml</file>
                </module>
            </updates>
        </layout>
    </adminhtml>
<global>
        <models>
            <module>
                <class>Namespace_Module_Model</class>
                <resourceModel>module_mysql4</resourceModel>
            </module>
            <module_mysql4>
                <class>Namespace_Module_Model_Mysql4</class>
                <entities>
                    <module>
                        <table>table1</table>
                    </module>
                </entities>
                <entities>
                    <flatrates>
                        <table>table2</table>
                    </flatrates>
                </entities>
            </module_mysql4>
        </models>
        <resources>
            <module_setup>
                <setup>
                    <module>Namespace_Module</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </module_setup>
            <module_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </module_write>
            <module_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </module_read>
        </resources>
        <blocks>
            <module>
                <class>Namespace_Module_Block</class>
            </module>
        </blocks>
        <helpers>
            <module>
                <class>Namespace_Module_Helper</class>
            </module>
        </helpers>
    </global>
</config>

但是没有任何用处仍然有同样的问题

我在这里做错了什么

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您是否尝试检查您桌面上的记录是否具有相同的ID? 我试着查看核心库上的特定代码,发现集合中的项目必须具有唯一的ID,否则会引发异常。

<?php
public function addItem(Varien_Object $item)
{
    $itemId = $this->_getItemId($item);

    if (!is_null($itemId)) {
        if (isset($this->_items[$itemId])) {
            throw new Exception('Item ('.get_class($item).') with the same id "'.$item->getId().'" already exist');
        }
        $this->_items[$itemId] = $item;
    } else {
        $this->_addItem($item);
    }
    return $this;
}

答案 1 :(得分:0)

它似乎与您的主键有关,请仔细检查模型中的_init()设置,因为它使用了错误的主键列。

class MagePal_Module_Model_Mysql4_Xyx extends Mage_Core_Model_Mysql4_Abstract
{
    public function _construct()
    {   
        $this->_init('module/xyz', 'autoc_id');