Craft plugin. Uniform syntax for fetching elements whether or not they have been eager loaded
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Agnostic Fetch plugin for Craft CMS 3.x

Craft plugin that provides uniform syntax for fetching elements whether or not they have been eager loaded


To install Agnostic Fetch, follow these steps:

  1. Download & unzip the file, rename the unzipped folder to agnosticfetch and place the agnosticfetch folder into your craft/plugins folder
  2. -OR- do a git clone directly into your craft/plugins folder, and rename to agnosticfetch. You can then update it with git pull
  3. -OR- install with Composer via composer require marionnewlevant/agnostic-fetch from your project folder
  4. Install plugin in the Craft Control Panel under Settings > Plugins
  5. The plugin folder should be named agnosticfetch for Craft to see it.

Agnostic Fetch works on Craft 3.x.

Agnostic Fetch Overview

The code to fetch the elements from a Craft Element Query is different when the elements have been eager-loaded. For example, to get the first element of a non eagerly loaded field,, but for an eagerly loaded field, someField[0] (and that doesn't even get into the error checking). With Agnostic Fetch, you can do someField | one (or one(someField) or

The Agnostic Fetch functions are available as twig filters, as twig functions, and as craft variables.

Using Agnostic Fetch


Use any of:

  • someField | all
  • all(someField)
  • craft.agnosticfetch.all(someField)


Use any of:

  • someField | one
  • one(someField)


Use any of:

  • someField | nth(index)
  • nth(someField, index)
  • craft.agnosticfetch.nth(someField, index)

(index is based from 0)


Use any of:

  • someField | ids
  • ids(someField)
  • craft.agnosticfetch.ids(someField)


Use any of:

  • someField | count
  • count(someField)
  • craft.agnosticfetch.count(someField)


In addition to the fetching functions, isEager will tell you whether elements have been eager loaded or not.

Use any of:

  • someField | isEager
  • isEager(someField)
  • craft.agnosticfetch.isEager(someField)

Brought to you by Marion Newlevant