2014-07-17 10 views
11

Ist es möglich, eine Aufzeichnung meines Modells durch ein anderes Feld meines Modells zu erhalten?Magento: Erhalte die Aufzeichnung meines Modells durch benutzerdefinierte Feld

Der normale Weg

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

Aber ich brauche so etwas wie dieses ist

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

das möglich?

Antwort

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

Okey das ist zu einfach und zu intelligent: D – rayphi

+1

Was passiert, wenn mehrere Zeilen mit den gleichen Felddaten übereinstimmen? Für mich ist es nur eine Zeile oder einen Datensatz zurückgeben? Gibt es eine Möglichkeit, die Auflistung der Zeilen zurückzugeben, die den Felddaten entsprechen? – ted

+0

@OSdave, Könnten Sie bitte $ ID durch einen aussagekräftigen Variablennamen ersetzen, zB: $ fieldName, nur um Verwirrung zu beseitigen. $ model-> load ($ fieldName, 'field_name'); –

1

Goto Modelldatei

NameSpace/Yourmodule/Model/YourModel.php 

unten Code hinzufügen

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

UND

NameSpace/YourModule/Model/Resource/YourModel.php 

und Code ist

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

nach einem wenig bearbeiten, die gut funktioniert. Vielen Dank – rayphi

+0

Das funktioniert gut, aber ich denke, die Lösung von @osdave ist der "Best-Practice-Weg" – rayphi

1

Verwendung dieses

$_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

Vergessen Sie nicht, meine Antwort zu mögen, wenn es hilfreich war. –

Verwandte Themen