Entries
The entries and query functions provide you with a convenient, fluent interface to fetch streams and non-streams database records respectively.
Introduction
The Streams Platform comes with a clean, extendable, fluent API for building database queries within the view layer.
entries
The entries function starts a model criteria query for database records powered by Streams. Being that nearly everything in PyroCMS is a stream this is your primary entry point to retrieving database records.
Returns: \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$namespace |
true |
string |
none |
The stream namespace. |
|
$slug |
false |
string |
The namespce provided. |
The stream slug. |
Twig
<ul>
{% for category in entries('posts', 'categories').get() %}
<li>
{{ category.slug }}
</li>
{% endfor %}
</ul>
query
The query function starts a model criteria query for database records that are not powered by Streams though it works all the same for Streams powered database records.
Returns: \Anomaly\Streams\Platform\Model\EloquentCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$model |
false |
string |
null |
The model to start the query from. |
Twig
{% set users = query()
.from('test_table')
.where('active', true)
.get() %}
// Using a model
{% set users = query('App\Example\TestModel')
.where('active', true)
.get() %}
Retrieving Results
This section will show you how to return results from the model criteria returned by entries and query functions.
Retrieving A Single Row
If you just need to retrieve a single entry, you may use the first method. This method will return a single \Anomaly\Streams\Platform\Entry\EntryPresenter:
{% set user = entries('users').where('display_name', 'Ryan Thompson').first() %}
{{ user.email }}
EloquentCriteria::get()
The get method returns the results of the query.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCollection or \Anomaly\Streams\Platform\Entry\EntryCollection
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$columns |
false |
array |
|
The columns to select. |
Twig
{% set users = entries('users', 'users')
.where('email', 'LIKE', '%@gmail.com%')
.where('activated', true)
.get() %}
{% for user in users %}
{{ user.display_name }}
{% endfor %}
EloquentCriteria::first()
The first method returns the first matching query result.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentPresenter or \Anomaly\Streams\Platform\Entry\EntryPresenter
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$columns |
false |
array |
|
The columns to select. |
Twig
{% set user = entries('users').where('display_name', 'Ryan Thompson').first() %}
{{ user.email }}
EloquentCriteria::find()
The find method allows you to return a single record by it's ID.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentPresenter or \Anomaly\Streams\Platform\Entry\EntryPresenter
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$identifier |
true |
integer |
none |
The ID of the result to return. |
|
$columns |
false |
array |
|
The columns to select. |
Twig
{% set user = entries('users').find(1) %}
{{ user.email.mailto|raw }}
EloquentCriteria::paginate()
The paginate method returns the result of the entries and query functions as a pagination object.
Returns: \Illuminate\Pagination\LengthAwarePaginator
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$perPage |
false |
string |
15 |
The number of entries per page. |
|
$columns |
false |
array |
|
The columns to select. |
Twig
{% set posts = entries('posts').paginate() %}
{% for post in posts %}
<p>
{{ post.title }}
</p>
{% endfor %}
{{ posts.links|raw }}
EloquentCriteria::findBy()
The findBy by method allows you to find a single query result by a column value. This comes in handy for finding records by slug for example.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentPresenter or \Anomaly\Streams\Platform\Entry\EntryPresenter
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The column to test. |
|
$value |
true |
mixed |
none |
The value to test the column by. |
|
$columns |
false |
array |
|
The columns to select. |
Twig
{% set admin = entries('roles', 'users').findBy('slug', 'admin') %}
// You can also map the column into the method name.
{% set admin = entries('roles', 'users').findBySlug('admin') %}
EloquentCriteria::cache()
The cache method sets the cache TTL for the query.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$ttl |
true |
int |
none |
The maximum time in seconds to cache results for. |
Twig
// Cache for a maximum of 300 seconds
{% set books = entries('library', 'books').cache(300).get() %}
EloquentCriteria::fresh()
The fresh method forces non-cached results to be returned.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Twig
{% set books = entries('library', 'books').fresh().get() %}
Aggregates
The model criteria also provide a variety of aggregate methods such as count, max, min, avg, and sum. You can call any of these methods after constructing your query.
EloquentCriteria::count()
The count method returns the total number of query results.
Returns: integer
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$columns |
false |
array |
|
The collection to add the asset to. |
Twig
{% set activated = entries('users').where('activated', true).count() %}
EloquentCriteria::sum()
The sum method returns the sum of the column value.
Returns: integer
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The column to summarize. |
Twig
{% set orders = entries('store', 'orders').where('finalized', true).sum('subtotal') %}
EloquentCriteria::max()
The max method returns the highest column value.
Returns: mixed
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The column to find the max for. |
Twig
{% set price = entries('store', 'products').where('enabled', true).max('price') %}
EloquentCriteria::min()
The min method returns the lowest column value.
Returns: mixed
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The column to find the min for. |
Twig
{% set price = entries('store', 'products').where('enabled', true).min('price') %}
EloquentCriteria::avg()
The avg method returns the average value of the column.
Returns: integer
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The column to average. |
Twig
{% set mean = entries('store', 'products').where('enabled', true).avg('price') %}
Where Clauses
This section will go over where clauses for the entries and query model criteria functions.
EloquentCriteria::where()
The where method adds a where clauses to the query. The most basic call to where requires three arguments. The first argument is the name of the column. The second argument is an operator, which can be any of the database's supported operators. Finally, the third argument is the value to evaluate against the column.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$operator|$value |
true |
string |
none |
The where operator. |
|
$value |
false |
string |
null |
The value if an operator is defined. |
Twig
// Example that verifies the value of the "votes" column is equal to 100:
{% set users = entries('users').where('votes', '=', 100).get() %}
// Assuming the "=" operator.
{% set users = entries('users').where('votes', 100).get() %}
EloquentCriteria::orWhere()
You may chain where constraints together as well as add or where clauses to the query.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$operator|$value |
true |
string |
none |
The where operator. |
|
$value |
false |
string |
null |
The value if an operator is defined. |
Twig
{% set = users = entries('users')
.where('votes', '>', 100)
.orWhere('name', 'John')
.get() %}
EloquentCriteria::whereBetween()
The whereBetween method verifies that a column's value is between two values.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$values |
true |
array |
none |
The values to test the column against. |
Example
{% set users = entries('users').whereBetween('votes', [1, 100]).get() %}
EloquentCriteria::whereNotBetween()
The whereNotBetween method verifies that a column's value lies outside of two values.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$values |
true |
array |
none |
The values to test the column against. |
Twig
{% set users = entries('users').whereNotBetween('votes', [1, 100]).get() %}
EloquentCriteria::whereIn()
The whereIn method verifies that a given column's value is contained within the given array.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$values |
true |
array |
none |
The array of values to find. |
Twig
{% set users = entries('users').whereIn('id', [1, 2, 3]).get() %}
EloquentCriteria::whereNotIn()
The whereNotIn method verifies that a given column's value is not contained within the given array.
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$values |
true |
array |
none |
The array of values to exclude. |
Twig
{% set users = entries('users').whereNotIn('id', [1, 2, 3]).get() %}
EloquentCriteria::whereNull()
The whereNull method verifies that the value of the given column is NULL.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
Twig
{% set users = entries('users').whereNull('updated_at').get() %}
EloquentCriteria::whereNotNull()
The whereNotNull method verifies that the column's value is not NULL.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
Twig
{% set users = entries('users').whereNotNull('updated_at').get() %}
EloquentCriteria::whereDate()
The whereDate method may be used compare a column's value against a date.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$operator|$value |
true |
string |
none |
The where operator. |
|
$value |
false |
string |
null |
The value if an operator is defined. |
Twig
{% set users = entries('users').whereDate('created_at', '2016-10-10').get() %}
EloquentCriteria::whereMonth()
The whereMonth method may be used compare a column's value against a specific month of an year.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$operator|$value |
true |
string |
none |
The where operator. |
|
$value |
false |
string |
null |
The value if an operator is defined. |
Twig
{% set users = entries('users').whereMonth('created_at', '10').get() %}
EloquentCriteria::whereDay()
The whereDay method may be used compare a column's value against a specific day of a month.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$operator|$value |
true |
string |
none |
The where operator. |
|
$value |
false |
string |
null |
The value if an operator is defined. |
Twig
{% set users = entries('users').whereDay('created_at', '10').get() %}
EloquentCriteria::whereYear()
The whereYear method may be used compare a column's value against a specific year.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$operator|$value |
true |
string |
none |
The where operator. |
|
$value |
false |
string |
null |
The value if an operator is defined. |
Twig
{% set users = entries('users').whereYear('created_at', '2016').get() %}
EloquentCriteria::whereColumn()
The whereColumn method may be used to test two values with an operator.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column to test. |
|
$operator|$compare |
true |
string |
none |
The test operator or the column to compare. |
|
$compare |
false |
string |
null |
The column to compare. |
Twig
// Assumes "=" operator
{% set users = entries('users').whereColumn('first_name', 'last_name').get() %}
// Use a different operator.
{% set users = entries('users').whereColumn('updated_at', '>', 'created_at').get() %}
JSON Where Clauses
Laravel supports querying JSON column types on databases that provide support for JSON column types. You can leverage this the in the criteria queries too. Currently, this includes MySQL 5.7 and Postgres. To query a JSON column, use the -> operator:
{% set users = entries('users')
.where('options->language', 'en')
.get() %}
{% set users = entries('users')
.where('preferences->dining->meal', 'salad')
.get() %}
Ordering, Grouping, Limit, & Offset
The Streams Platform supports a number of Laravel methods for ordering, grouping, limit, and offsetting records.
EloquentCriteria::orderBy()
The orderBy method allows you to sort the result of the query by a given column.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$direction |
true |
string |
none |
The direction to order column values. |
Twig
{% set users = entries('users').orderBy('name', 'desc').get() %}
EloquentCriteria::inRandomOrder()
The inRandomOrder method may be used to sort the query results randomly. For example, you may use this method to fetch a random record.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Twig
{% set user = entries('users').inRandomOrder().first() %}
EloquentCriteria::groupBy()
The groupBy method can be used to group the query results.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
Twig
{% set users = entries('users').groupBy('category').get() %}
EloquentCriteria::having()
The having method is used often in conjunction with the groupBy method.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$column |
true |
string |
none |
The name of the column. |
|
$operator|$value |
true |
string |
none |
The where operator. |
|
$value |
false |
string |
null |
The value if an operator is defined. |
Twig
{% set users = entries('users').groupBy('account_id').having('account_id', '>', 100).get() %}
EloquentCriteria::skip()
The skip method is an alias for limit.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$offset |
true |
integer |
none |
The number of results to skip. |
Twig
{% set users = entries('users').skip(10).get() %}
EloquentCriteria::offset()
The offset method skips a number of results from the query.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$number |
true |
integer |
none |
The number of results to skip. |
Twig
{% set users = entries('users').offset(10).get() %}
EloquentCriteria::take()
The take method is an alias for limit.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$number |
true |
integer |
none |
The number of results to return. |
EloquentCriteria::limit()
The limit method specifies the number of results to return.
Returns: \Anomaly\Streams\Platform\Eloquent\EloquentCriteria or \Anomaly\Streams\Platform\Entry\EntryCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$number |
true |
integer |
none |
The number of results to return. |
Twig
{% set users = entries('users').limit(5).get() %}
Searching
This section will show you how to search for results from the search criteria returned by entries and query functions.
EloquentCriteria::search()
The search method returns a new search criteria instance which can be used just like the entry and eloquent criteria.
Returns: \Anomaly\Streams\Platform\Search\SearchCriteria
Arguments
| Key | Required | Type | Default | Description |
|---|---|---|---|---|
|
$term |
true |
string |
none |
The term you would like to search for. |
Twig
// The search method must be used after entries/query
{% set results = entries('users').search('gmail').get() %}
// You can still chain criteria methods after search.
{% set results = entries('users').search('gmail').where('active', true).get() %}
Searchable Models
In order to leverage model searching you must make your model searchable using the \Laravel\Scout\Searchable trait:
use \Laravel\Scout\Searchable;
For Streams entry models you can also simply define the searchable flag since the base models implement this trait already:
protected $searchable = true;
Searchable Streams
Defining Streams as searchable can be done just like a model. However you may want to include this option in your streams migration as well:
protected $stream = [
'slug' => 'users',
'title_column' => 'username',
'searchable' => true,
'trashable' => true,
];