모듈 / 모델 /SomeModel.php
public function loadByAttributes($attributes)
{
$this->setData($this->getResource()->loadByAttributes($attributes));
return $this;
}
모듈 / 모델 / 자원 /SomeModel.php :
public function loadByAttributes($attributes)
{
$adapter = $this->_getReadAdapter();
$where = array();
foreach ($attributes as $attributeCode=> $value) {
$where[] = sprintf('%s=:%s', $attributeCode, $attributeCode);
}
$select = $adapter->select()
->from($this->getMainTable())
->where(implode(' AND ', $where));
$binds = $attributes;
return $adapter->fetchRow($select, $binds);
}
마지막으로 다음과 같은 모델을로드 할 수 있습니다.
$attributes = array('tag_name'=> 'any', 'custome_name'=> 'some','group_name'=>'some');
$model = Mage::getModel('module/somemodel')->loadByAttributes($attributes);
업데이트
그런데이 (loadByAttributes) 메소드를 콜렉션 대신 쉽게 사용할 수 있으며 더 이해하기 쉽습니다. Magento는 컬렉션 또는 엔터티를로드하는 동안 일부 이벤트를 전달하며 타사 확장 프로그램은 관찰자에 의해 컬렉션 또는 엔터티를 업데이트 할 수 있습니다. 자원을 통해 엔터티를로드하는 경우 (내와 귀하의 예제가 제공됨) 이벤트 / 관찰자가 발생하지 않으며 수집보다 "깨끗한"엔터티를 더 빨리 얻을 수 있습니다. 또한 Magento는 이러한 방식으로 캐시 된 컬렉션을 사용하지 않고 db 테이블에서 직접로드합니다.
아마도 이것이 Magento 코어 모듈에서이 방법을 사용하는 이유 일 것입니다.