마젠 토의 CRUD 모델에는 세 가지 기본 클래스 유형이 있습니다.
"모델"은 가장 일반적으로 사용되는 것입니다. 데이터베이스 유형에 관계없이 특정 유형의 데이터를 나타냅니다 (제품, 카테고리, CMS 페이지, 검토 등).
"자원 모델"은 무대 뒤에서 Magento에서 데이터를 실제로 가져 오는 클래스입니다. 모든 모델 에는 데이터베이스에서 모델 의 단일 인스턴스를로드하는 데 사용되는 자원 모델 이 있습니다.
"컬렉션"은 일련의 규칙에 따라 여러 모델의 구조와 같은 배열을로드하는 클래스입니다. SQL처럼 생각하십시오 WHERE clause
.
어느 정도 일을 혼동하는 장면 뒤에, 마 젠토가있다 또한 자원 모델로 컬렉션을 고려한다. 그래서 거기에 수집 자원 모델 및 개별 자원 모델을 .
일반적으로 특정 항목을로드하려는 경우 model 을 사용합니다 . 여러 항목을로드하려면 콜렉션 자원 모델 을 사용하십시오 .
//loads one
$product = Mage::getModel('catalog/product')->load($id);
//loads many products where price is greater than 100
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*') //load all fields, see EAV below
->addAttributeToFilter('price', array('gt'=>'100'));
foreach($products as $product)
{
var_dump($product->getSku());
}
콜렉션 자원 모델을 통한로드에 대해 명심해야 할 한 가지는 개별 모델의 각 afterLoad
메소드가 자동으로 호출되지 않으므로 일부 데이터가로드되지 않을 수 있다는 것입니다.
individua 자원 모델 클래스는 일반적으로 직접 액세스 할 수 없습니다. 그러나 때때로 특정 모델 에는 유용한 방법 이있는 자원 모델이 있습니다. 이것들은 시스템을 사용하여 시간이 지남에 따라 발견됩니다.
마지막으로 한 가지 더 구별해야합니다. Magento의 일반 CRUD 모델에는 숫자 ID가 아닌 것을 통해로드하기위한 특별한 구문이 있습니다. 예를 들어 제목별로 CMS 페이지 모델을로드하는 방법은 다음과 같습니다.
$page = Mage::getModel('cms/page')->load('Home page','title');
var_dump($page->getData());
그러나 일부 Magento 모델은 EAV 모델입니다. 이것은 "엔티티 속성 값"을 나타내며 이러한 모델에 고정 된 필드 집합이 없다고 말하는 멋진 방법입니다. 여기에는 제품 모델 및 카테고리 모델이 포함됩니다. 이 기능을 사용하면 제품 유형마다 다른 속성을 선택할 수 있습니다. EAV 모델의 각 필드를 속성이라고합니다. 위의 구문은 이러한 모델에서 작동하지 않으며 대신 loadByAttribute
메서드 를 사용해야합니다 .
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'n2610');
특정 문제와 관련하여 특정 텍스트 "method undefined"에 오류가 발생하면 시스템에 문제가있는 것입니다. 이 getSku
메소드가 존재하지 않더라도 Magento에는 get
모든 모델 에 대한 호출 이 null 인 경우에도 항상 무언가를 반환 하도록하는 매직 세터 및 게터 메소드가 있습니다.
다음과 같은 오류가 발생했을 가능성이 큽니다.
Call to a member function getSku() on a non-object
이 오류는 객체를로드 할 수없는 경우 loadByAttribute
메소드가 반환 하기 때문에 발생 false
합니다.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'this-is-not-a-sku');
var_dump($product); //prints false
코드에서 이와 같은 것을 시도하십시오.
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'sku-value');
if($product)
{
var_dump($product->getName());
var_dump($product->getSku());
var_dump($product->getData());
}
else
{
var_dump("Could not load product");
}
조건부 외에도 getData()
방법을 확인하십시오. 모든 객체 데이터의 배열을 배열로 반환합니다.
잘만되면 이것이 당신을 움직 이기에 충분합니다. 행운을 빕니다!
$product
인스턴스가Mage_Catalog_Model_Product
있습니다.