ExpressionEngine® User Guide

Using the Model Service

Naming Conventions

Models follow the prefix naming conventions. Native models can be referred to either prefix-free or with the ee: prefix. All add-on models must be used with the add-on prefix.


To create a new instance of a model, simply pass its name to the make() method on the model service:

$template = ee('Model')->make('Template');

You can also pass an array of default model properties:

$template = ee('Model')->make('Template', array(
  'template_name' => 'test'

Setting and Getting Values

Models behave like regular objects. Their properties can be set and read directly:

$template->template_name = 'index';
var_dump($template->template_name); // 'index'

To bulk set data from an array, use the set() method:

  'template_name' => 'header',
  'template_notes' => 'This is the site header!'


To save a new or updated model, call save():

$template->template_notes = 'A great note!';


To delete an existing model, call delete():

echo $template->template_name;


Full Documentation: Fetching Models

To fetch one or more existing models, use the get() method with a model name to specify which model to get, and then call all() to fetch a collection of all matching models:

$templates = ee('Model')->get('Template')->all();

You can also use first() to only grab the first one:

$template = ee('Model')->get('Template')->first();


Full Documentation: Event Service

All models have basic support for the built-in event system. To listen to an event on a model, use the on method:

$my_model = ee('Model')->make('myaddon:MyModel');

$my_model->on('boom', function() use ($my_model)
  echo 'boom event happened on '.$my_model->getName();

To initiate an event, use the emit() method:


Any additional arguments passed to emit, will be passed on to the event handler.


After making changes to a model, you should call validate() to ensure it will save successfully. The result returned from validation is a result object from the Validation Service:

$template->template_name = 'Mike';
$result = $template->validate();

if ($result->isValid())

Working with Relationships

Full Documentation: Working with Relationships

Models can be related to other models. All relationships can be accessed directly with their uppercase name:


Depending on the type of relationship, this may return either a collection or a single other model. By convention, if the name is singular it returns a model otherwise it returns a collection.