метод загрузки по сравнению с методом 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();

Вот мой вопрос. Какой метод быстрее и лучше использовать и почему?

Если ничего из этого нет, то какой самый быстрый способ доступа к данным?

Author: Murtuza Zabuawala, 2016-10-26

3 answers

Зависит от того, что вам нужно.
Если вы планируете вызвать save на одном из объектов (особенно если это объект подслушивания), вам следует использовать load.
Если вам просто нужно отобразить некоторые данные, вы должны использовать подход сбора.
Но будьте осторожны с getFirstItem. Он полностью загружает коллекцию.
Если вам нужен только один элемент, вы должны использовать getFirstItem() в сочетании с ограничением ->setPageSize(1)->setCurPage(1).

Кроме того, есть некоторые случаи, когда вам абсолютно необходимо использовать load. Некоторые события являются отправляется при вызове load (например, afterLoad), а другие отправляются при загрузке коллекции.
У вас может быть логика, которая зависит от этих событий.

 6
Author: Marius, 2016-10-26 12:48:54

Если вы хотите получить доступ только к имени (без обновления сущности), использование коллекции определенно быстрее, но вам нужно ограничить его с помощью setPageSize(1):

$collection = Mage::getResourceModel('stackexchange/questions_collection')
    ->addFieldToSelect('name')
    ->setPageSize(1);

if ($collection->getSize()) {
     $name = $collection->getFirstItem()->getName();
}
 4
Author: Raphael at Digital Pianism, 2016-10-26 12:52:04

Оба имеют различную цель

load($id) обычно мы используем его, когда нам нужно обновить или удалить эту запись.

getCollection() используйте для получения количества записей.

Но, на мой взгляд, если вам нужны только одни данные, то вместо getCollection load лучше всего использовать.

Но если вам нужны мультиплетные данные, вам придется использовать getCollection.

В конце этого, если вы хотите увидеть запрос. затем echo $model->getSelect();

 1
Author: Murtuza Zabuawala, 2016-10-26 13:04:07