2010-07-07 40 views
4

我正在为magento版本1.3.2.3开发我的第一个模块。 我已经创建了一个简单的表格(不是EAV,只是一个主键和两列),还有一些类来访问它,Alan Storm's articles帮助了我很多,但我无法弄清楚如何做一个简单的选择:Alan解释如何使用主键加载,但不选择匹配某个值的行。Magento:从数据库中选择

正常的MySQL我会写:

SELECT * 
FROM my_table 
WHERE some_field = '" . $someValue . "' 

我发现的一个片段,给了我我想要的结果:

$resource = new Mage_Core_Model_Resource(); 
$read = $resource->getConnection('core_read'); 
$select = $read->select() 
       ->from('my_table') 
       ->where('some_field = ?', $someValue); 
return $read->fetchAll($select); 

但必须有一个更简单/更漂亮的解决方案,使用我创建的模型类。结果将是一行,而不是集合。
我用尽了一切我能想到的,如:

return Mage::getModel('modulename/classname')->select()->where('some_field = ?', $comeValue); 
return Mage::getModel('modulename/classname')->load()->where('some_field = ?', $comeValue); 
return Mage::getModel('modulename/classname')->load(array('some_field = ?', $comeValue)); 

和更多的东西,但至今没有运气:我失去了什么?

回答

5

下面是如何在CoreUrlRewrite Model类实现的例子:

public function loadByIdPath($path) 
{ 
    $this->setId(null)->load($path, 'id_path'); 
    return $this; 
} 

您可以创建在你的模型类类似的方法。您还可以在代码中的任意位置使用加载方法的替代形式:

$model = Mage::getModel('modulename/classname')->load($someValue, 'some_field'); 
+0

谢谢西尔沃,这正是我想要的。 – OSdave 2010-07-08 12:59:47

7

您可能想要使用your model's Collection

$collection = Mage::getModel('mygroup/mymodel')->getCollection(); 
$collection->addFieldToFilter('some_field',$some_value); 

foreach($collection as $item) 
{ 
    var_dump($item); 
} 

var_dump($collection->getFirstItem()); 
var_dump($collection->getLastItem()); 
+0

嗨Alan,谢谢你的回答。我试过你的解决方案,它也可以工作,但在这种情况下,我知道结果是一行,我认为西尔沃的解决方案更好。 虽然第一种和最后一种方法有趣,但我会记住它们。 – OSdave 2010-07-08 13:02:23

+0

@Refilon听起来像你想问一个新的问题,而不是对旧问题的评论 – 2016-01-20 17:22:23

+0

只是一个小小的更正:它必须是'getModel',而不是'getMode' – klawipo 2017-10-16 12:41:45