Что означает «загрузка» в объектах Magento? - PullRequest
4 голосов
/ 16 февраля 2011

Я пытаюсь немного научиться кодировать через Magento, и я должен признать, что я немного запутался в этом понятии цепочки объектов в нем.

На самом деле я не понимаю, когда делать нагрузку, а когда я могу ее избежать. Например:

$product = Mage::getModel('catalog/product')->load($item->getProductId());

Я хотел бы получить информацию о продукте из ID продукта в этом случае; зачем мне его загружать? ($item - это цикл всех продуктов заказа)

И здесь мне не нужно делать никакой нагрузки:

$customer = $payment->getOrder()->getCustomer();

Заранее прошу прощения за мой глупый вопрос: что делает загрузка по сравнению со вторым примером? Большое спасибо и хорошего дня,

Ансельм

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

За кулисами метод, подобный $payment->getOrder(), эффективно (после проверки, загрузился ли он) выполняет следующее:

return Mage::getModel('sales/order')->load($this->getOrderId());
// $this in this context is $payment

Таким образом, для получения соответствующих данных из базы данных все еще требуется загрузкаgetOrder() метод - это просто удобство.Сам метод load() возвращает экземпляр своего класса, поэтому вы можете присвоить его $product в первом примере.Методы getOrder() и getCustomer() не возвращают себя, они возвращают другой объект, поэтому $payment не назначен на $customer во втором примере.

Метод Mage::getModel() отвечает только за определение правильного класса и создание его пустого экземпляра.Вместо загрузки вы могли бы установить данные с помощью вызова setData(), передавая массив значений с ключами.Все сеттеры возвращают свой объект, как load().

1 голос
/ 19 сентября 2012
$customer = $payment->getOrder()->getCustomer();

Это означает, что идентификатор клиента уже присутствует в сеансе, поэтому вам не нужно явно указывать magento для загрузки клиента.

В случае с продуктом вы должны указатьmagento идентификатор продукта, информацию о котором вы хотите получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...