ElementCriteriaModel and the individual element models (like the
EntryModel) can be thought of as two different points of time in retrieving data from your database. Essentially, you'll use an
ElementCriteriaModel before the database is queried and the element models afterwards.
Why do I sometimes have to fetch elements with
ElementCriteriaModel does what it says on the tin — it specifies criteria to find elements. When you call
.last(), the model sends itself off to the
ElementsService which will return element models, based on your criteria.
…and in other cases the ElementCriteriaModel is enough?
Internally, Craft is using
ElementCriteriaModels to work things out. For pagination or the
.getPrev() example, Craft is finding elements using the same criteria, but it's using it in a different way to
.find() or similar methods.
You can omit the
.find() method and treat the
ElementCriteriaModel as an array, but it depends on your scenario. As was touched on here, there are performance impacts to consider.