Magento: Получить запись о моей модели по пользовательскому полю


Можно ли получить запись моей модели с помощью другого поля моей модели?

Обычный способ

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

Но мне нужно что-то вроде этого

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

Возможно ли это?

Author: Phantom, 2014-07-17

3 answers

$model = Mage::getModel('foo_bar/baz');
$model->load('field_value', 'field_name');
 48
Author: OSdave, 2017-01-12 00:12:58

Используйте это

$_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');  
 1
Author: Karan Adhikari, 2014-07-17 08:06:37

Файл модели Goto

NameSpace/Yourmodule/Model/YourModel.php

Добавить ниже код

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

И

NameSpace/YourModule/Model/Resource/YourModel.php

И код

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;
}
 1
Author: Amit Bera, 2014-07-17 11:11:18