метод загрузки по сравнению с методом getCollection, который лучше и быстрее
Предположим, что у нас есть 1 запись в базе данных, а идентификатор равен 1
Мы можем получить запись, используя 2 метода загрузки по идентификатору и getCollection.
$model = Mage::getModel('stackexchange/questions')
->getCollection()
->addFieldToFilter('id',1);
foreach($model as $mod) {
echo $mod->getName();
}
ИЛИ
$model = Mage::getModel('stackexchange/questions')
->getCollection()
->getFirstItem();
echo $model->getName();
И мы можем получить отдельные записи с помощью load();
$model = Mage::getModel('stackexchange/questions')->load(1);
echo $model->getName();
Вот мой вопрос. Какой метод быстрее и лучше использовать и почему?
Если ничего из этого нет, то какой самый быстрый способ доступа к данным?
3 answers
Зависит от того, что вам нужно.
Если вы планируете вызвать save
на одном из объектов (особенно если это объект подслушивания), вам следует использовать load
.
Если вам просто нужно отобразить некоторые данные, вы должны использовать подход сбора.
Но будьте осторожны с getFirstItem
. Он полностью загружает коллекцию.
Если вам нужен только один элемент, вы должны использовать getFirstItem()
в сочетании с ограничением ->setPageSize(1)->setCurPage(1)
.
Кроме того, есть некоторые случаи, когда вам абсолютно необходимо использовать load
. Некоторые события являются отправляется при вызове load
(например, afterLoad
), а другие отправляются при загрузке коллекции.
У вас может быть логика, которая зависит от этих событий.
Если вы хотите получить доступ только к имени (без обновления сущности), использование коллекции определенно быстрее, но вам нужно ограничить его с помощью setPageSize(1)
:
$collection = Mage::getResourceModel('stackexchange/questions_collection')
->addFieldToSelect('name')
->setPageSize(1);
if ($collection->getSize()) {
$name = $collection->getFirstItem()->getName();
}
Оба имеют различную цель
load($id)
обычно мы используем его, когда нам нужно обновить или удалить эту запись.
getCollection()
используйте для получения количества записей.
Но, на мой взгляд, если вам нужны только одни данные, то вместо getCollection
load
лучше всего использовать.
Но если вам нужны мультиплетные данные, вам придется использовать getCollection
.
В конце этого, если вы хотите увидеть запрос. затем echo $model->getSelect();