2010-07-07 76 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