<p>There's also a really good answer explained in this ticket. Similar explanation but this made it click for me.</p>

<p><a href="https://craftcms.stackexchange.com/a/23951/4433">https://craftcms.stackexchange.com/a/23951/4433</a></p>

CC BY-SA 3.0
2018-02-21T22:50:57.347Z
2018-02-21T22:50:57.347Z
Ryan
<p>The <a href="https://craftcms.com/docs/templating/elementcriteriamodel">ElementCriteraModel description in the docs</a> explains what the <a href="https://craftcms.com/docs/templating/elementcriteriamodel#find"><code>find()</code></a> method does.</p>

<p>Essentially, when you use <code>craft.entries</code> you are building an <code>ElementCriteriaModel</code> object that represents the query that you want to make. That query doesn't actually happen until you call the <code>find()</code> method.</p>

<p>As the docs state, as soon as you treat <code>craft.entries</code> (or a variable that you have assigned it to) as an array, by using it in a <code>{% for %}</code> loop, or by calling the <code>| length</code> filter on it, <code>find()</code> is automatically called.</p>

<p>So in the example in your question, you can safely leave out the <code>find()</code> and it will be called automatically anyway when the <code>{% for %}</code> loop is executed.</p>

CC BY-SA 3.0
2016-04-05T07:21:07.763Z
2016-04-05T07:21:07.763Z
Steve Rowling
<p>I've noticed code samples like the following that use the <code>find()</code> method.</p>

<pre><code>{% for entry in craft.entries.section('blog').limit(5).find() %}
    &lt;li&gt;&lt;a href="{{ entry.url }}"&gt;{{ entry.title }}&lt;/a&gt;&lt;/li&gt;
{% endfor %}
</code></pre>

<p>I've noticed that this code sample works just as well without the <code>find()</code> method attached. Is there a particular reason we use <code>find()</code>? Are there instances where it's required? Should I be using it even if the code works without it?</p>

CC BY-SA 3.0
2016-04-05T01:18:22.550Z
Hi Tim - I asked the same thing a while ago - I think it was within Slack though. Someone else will give a much better answer I'm sure but...When working with entries the `.find()` is implied. Craft will do it automatically and it won't hurt anything if you call it. There are other times where `find()` is implied but I forget what that is.

There are other cases though where you do need to call `find()`.
Damon
<entries><queries>
When is the find() method actually necessary?
# When is the find() method actually necessary?

(Asked by: username_0 on 2016-04-05)

I've noticed code samples like the following that use the find() method.
{% for entry in craft.entries.section('blog').limit(5).find() %}
    {{ entry.title }}
{% endfor %}

I've noticed that this code sample works just as well without the find() method attached. Is there a particular reason we use find()? Are there instances where it's required? Should I be using it even if the code works without it?

**Tags:** entries, queries
> **Comments:**
> **username_1**: Hi Tim - I asked the same thing a while ago - I think it was within Slack though. Someone else will give a much better answer I'm sure but...When working with entries the `.find()` is implied. Craft will do it automatically and it won't hurt anything if you call it. There are other times where `find()` is implied but I forget what that is.  There are other cases though where you do need to call `find()`.  

---

## 2 answers

### Answer by username_3 on 2016-04-05. Score: 6 | Accepted answer

The [ElementCriteraModel description in the docs](https://craftcms.com/docs/templating/elementcriteriamodel) explains what the [`find()`](https://craftcms.com/docs/templating/elementcriteriamodel#find) method does.

Essentially, when you use `craft.entries` you are building an `ElementCriteriaModel` object that represents the query that you want to make. That query doesn't actually happen until you call the `find()` method.

As the docs state, as soon as you treat `craft.entries` (or a variable that you have assigned it to) as an array, by using it in a `{% for %}` loop, or by calling the `| length` filter on it, `find()` is automatically called.

So in the example in your question, you can safely leave out the `find()` and it will be called automatically anyway when the `{% for %}` loop is executed.


---

### Answer by username_2 on 2018-02-21. Score: 1

There's also a really good answer explained in this ticket. Similar explanation but this made it click for me.

<https://craftcms.stackexchange.com/a/23951/4433>


---

