Tag: Carga de modelos

Magento: Cargar Modelo por distintos campos

Cuantas veces nos hemos topado con la necesidad de cargar un modelo de datos sin conocer el id en un módulo creado por nosotros. Y nativamente no encontramos la manera de hacerlo, ya que el ORM de Magento, con un modelo recién creado, solo permite la carga de modelos a través del id. Como por ejemplo:

$model = Mage::getModel('minamespace_mimodulo/modelo')->load(5);
$model->getData();

Sí necesitamos cargar un modelo por medio de otro campo, necesitamos agregar un par de métodos en nuestras clases modelos y resources models.
Supongamos que necesitamos hacer una carga del modelo a través de un campo propio, en este caso “Teléfono”. Para esto necesitamos modificar nuestra clase ubicada en:
Minamespace_Mimodulo_Model_Modelo

public function loadByTelephone($telephone){
$this->_getResource()->loadByTelephone($this, $telephone);
return $this;
}

Con esto, indicamos que necesitamos obtener datos por medio de un método del Resource Model. Posteriormente agregamos otro método a nuestro Resource Model, ubicado en:
Minamespace_Mimodulo_Model_Mysql4_Modelo

public function loadByTelephone(Entrepids_Product_Model_Enhancement_Item     $custommoduleobj, $telephone)
{
$select = $this->_getReadAdapter()->select()
->from($this->getMainTable())
->where($this->getMainTable() . '.' . 'telephone' . '=?', $telephone);
$custommodule_id = $this->_getReadAdapter()->fetchOne($select);
if ($custommodule_id)
$this->load($custommoduleobj, $custommodule_id);
return $this;
}

Con esto estamos logrando la carga de nuestro modelo de datos especificando el query que se encargará de retornar estos datos.

Ya por último, para poder hacer uso de estos datos, lo haremos de la siguiente manera:

$model= Mage::getModel('minamespace_mimodulo/modelo')->loadByTelephone($telephone);
$model->getData();