在这种情况下如何使用 getCollection()
Posted
技术标签:
【中文标题】在这种情况下如何使用 getCollection()【英文标题】:How to use getCollection() in this case 【发布时间】:2014-05-30 10:05:12 【问题描述】:我遇到了无法解决的问题。部分原因是我无法用正确的术语来解释它。我是新手,很抱歉这个笨拙的问题。
您可以在下面看到我的目标概览。
我正在使用 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)
));
Table1(c_id 为主键)
c_id title value
----- ----- -----
64 my 1
Table2(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>
但没什么用,我还是有同样的问题
我在这里做错了什么
有什么想法吗?
【问题讨论】:
不,不是这样,我可以获得多个记录 where c_id = 64;但现在当我只有一条记录 where c_id = 64; 【参考方案1】:您是否尝试过检查表中的记录是否具有相同的 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;
【讨论】:
那么 c_id 是你模型的主键吗? 是的,但实际上 c_id 和其他详细信息在不同的表中(在此表中)我将 c-id 存储为外键 你之前应该提到过。我假设您正在使用 join 获取集合,并且记录正在返回重复项。您可以做的是为该表设置一个新的主键,您仍然可以使用 c_id 作为外键。 请看看我的问题,我也更新了我的表格结构 你能不能也给我们看看你的模块的配置文件,我要看看你的资源模型是怎么设置的。【参考方案2】:它似乎与您的主键有关,请仔细检查模型中的 _init()
设置,因为它使用了错误的主键列。
class MagePal_Module_Model_Mysql4_Xyx extends Mage_Core_Model_Mysql4_Abstract
public function _construct()
$this->_init('module/xyz', 'autoc_id');
【讨论】:
我已经尝试过这个,但我仍然有同样的错误&这里我没有给出 autoc_id 我从 URL 获取 c_id 值。如果值为 autoc_id 则表示它会完美运行但这里不同。 我从 URL 获得的 c_id 值我必须使用像“Select * from table2 where c-id=64”这样的查询我该怎么做?实际的问题是这个查询我' m 获得多条记录,这意味着 4 条记录,因为它给出了错误,例如“相同的 id”64“已经存在” 你清除缓存了吗?见***.com/questions/8751694/…以上是关于在这种情况下如何使用 getCollection()的主要内容,如果未能解决你的问题,请参考以下文章
在这种情况下,如何使用 barh() 在条形图上显示值? [复制]