【问题标题】:Magento: Get record of my model by custom FieldMagento:通过自定义字段获取我的模型记录
【发布时间】:2014-07-17 06:52:48
【问题描述】:

是否可以通过我的模型的另一个字段获取我的模型的记录?

正常方式

$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

这可能吗?

【问题讨论】:

    标签: php magento magento-1.7


    【解决方案1】:
    $model = Mage::getModel('foo_bar/baz');
    $model->load('field_value', 'field_name');
    

    【讨论】:

    • Okey 简单又聪明 :D
    • 如果多行匹配相同的字段数据怎么办?对我来说,它只返回一行或一条记录?有没有办法返回与字段数据匹配的行集合。
    • @OSdave,您能否将 $id 替换为一些有意义的变量名,例如:$fieldName,以消除混淆。 $model->load($fieldName, 'field_name');
    • @vineetsajwan,你搞错了。 $id 是“field_name”字段应该具有的值,以便加载该记录。
    • @Mihai - 好吧,其实我是这么理解的。
    【解决方案2】:

    使用这个

    $_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');  
    

    【讨论】:

    • 如果对我的回答有帮助,别忘了点赞。
    【解决方案3】:

    转到模型文件

    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;
    }
    

    【讨论】:

    • 这项工作很好,但我认为@osdave 的解决方案是更“最佳实践方式”
    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2018-03-19
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多