2014-07-17 23 views
11

Czy jest możliwe uzyskanie zapisu mojego modelu przez inne pole mojego modelu?Magento: Uzyskaj zapis mojego modelu według niestandardowego pola

normalny sposób

$model = Mage::getModel('foo_bar/baz'); 
$model->load($id); 
// do something with the loaded record 

ale muszę coś takiego

$model = Mage::getModel('foo_bar/baz'); 
$model->loadByAnotherFieldOfModel($value) 
// do something with the loaded record 

to możliwe?

Odpowiedz

47
$model = Mage::getModel('foo_bar/baz'); 
$model->load('field_value', 'field_name'); 
+0

Okey to łatwe i inteligentne: D – rayphi

+1

Co zrobić, jeśli wiele wierszy pasuje do tych samych danych pola? Dla mnie to jedyny powracający jeden wiersz lub jeden rekord? Czy istnieje sposób na zwrócenie kolekcji wierszy pasujących do danych pola. – ted

+0

@OSdave, Czy mógłbyś zastąpić $ id pewną znaczącą nazwą zmiennej np .: $ fieldName, żeby wyjaśnić zamieszanie. $ model-> load ($ fieldName, 'field_name'); –

1

Goto plik modelu

NameSpace/Yourmodule/Model/YourModel.php 

dodać poniżej kodu

public function loadByField($fieldvalue) 
{ 
    $this->_getResource()->loadByField($this, $fieldvalue); 
    return $this; 
} 

I

NameSpace/YourModule/Model/Resource/YourModel.php 

i kod jest

public function loadByField(NameSpace_YourModule_Model_YourModel $Object, $fieldvalue) 
{ 
    $adapter = $this->_getReadAdapter(); 
    $bind = array('fieldname' => $fieldvalue); 
    $select = $adapter->select() 
     ->from($this->getMainTable(), 'tablePrimaryKey') 
     ->where('fieldname = :fieldname'); 

    $modelId = $adapter->fetchOne($select, $bind); 
    if ($modelId) { 
    $this->load($Object, $modelId); 
    } else { 
    $Object->setData(array()); 
    } 

    return $this; 
} 
+0

po trochę edit, który działa dobrze. Dziękuję – rayphi

+0

To działa dobrze, ale myślę, że rozwiązaniem @osdave jest bardziej "najlepsza praktyka" – rayphi

1

użyć tej

$_category = Mage::getModel('catalog/category')->loadByAttribute('name', 'computer'); 
$_product = Mage::getModel('catalog/product')->loadByAttribute('name', 'hp2312'); 

// Load by SKU 
$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'computer123'); 
+0

nie zapomnij polubić mojej odpowiedzi, jeśli była pomocna. –