Repositories
Introduction
Because the Streams Platform treats models like entities it's design dictates that we put access/storage logic into repositories
. These repositories simply wrap the models themselves to pass along controlled access/storage methods.
This document will point out plugin functionality where it matches repositories. Even though they are two different classes responsible.
Collections
Where noted results are returned as \Anomaly\Streams\Platform\Model\EloquentCollection
collections. Learn more about collections here.
Base Repository
The base repository wraps regular \Anomaly\Streams\Platform\Model\EloquentModel
instances. All repositories extending the base repository have these features.
all
The all
function simply returns all the non-trashed entries as an \Anomaly\Streams\Platform\Model\EloquentCollection
:
$collection = $repository->all();
{% set collection = entries(namespace, stream).all() %}
find
The find
function returns a single entry by it's $id
:
$entry = $repository->find($id);
{% set entry = entries(namespace, stream).find(id) %}
findBy
The findBy
function returns a single entry by it's unique $attribute
and $value
:
$entry = $repository->findBy($attribute, $value);
{% set entry = entries(namespace, stream).findBy(attribute, value) %}
findAll
The findAll
function returns a collection of entries where in an array of $ids
:
$collection = $repository->findAll($ids);
{% set collection = entries(namespace, stream).findAll(ids) %}
findAllBy
The findAllBy
function returns a collection of entries where $attribute
is $value
:
$collection = $repository->findAllBy($attribute, $value);
{% set collection = entries(namespace, stream).findAllBy(attribute, value) %}
create
The create
function creates a new entry with $attributes
. Returns the created entry or false
if creation fails.
$result = $repository->create($attributes);
Remember when creating translatable entries you define translatable attributes as a locale
attribute of values.
$result = $repository->create([
'name' => 'Ryan',
'en' => [
'title' => 'Developer'
]
]);
newQuery
The newQuery
function returns a new query builder instance.
$query = $repository->newQuery();
Within views, a criteria instance is returned. Criterias are wrap query builders and restrict their functionality for security. Destructive actions are not possible within views.
{% criteria = query(table) %}
{% criteria = entry(model) %}
{% criteria = entry(namespace, stream) %}
save
The save
function saves changes applied to an entry
. Returns true
if successful or false
.
$result = $repository->save($entry);
update
The update
function updates all entries with the provided $attributes
. Returns true
if successful or false
.
$result = $repository->update($attributes);
delete
The delete
function deletes a given entry
. Returns true
if successful or false
.
Trashable entries will be trashed until forceDelete
is used or the trash is emptied.
$result = $repository->delete($entry);
forceDelete
The forceDelete
function deletes a given trashable entry
without trashing it first. Returns true
if successful or false
.
$result = $repository->forceDelete($entry);
restore
The restore
function restores a given trashable entry
from it's trashed state. Returns true
if successful or false
.
$result = $repository->restore($entry);
truncate
The truncate
function deletes all entries from the database. This can be helpful during for mass/import/refresh commands.
$repository->truncate();
withoutEvents
The withoutEvents
function allows you to execute a $closure
of repository logic to run without firing model events like saved
or created
.
$result = $repository->withoutEvents($closure);
$users = app(Anomaly\UsersModule\User\Contract\UserRepositoryInterface::class);
if ($user = auth()->user()) {
$users->withoutSyncingToSearch(
function () use ($user) {
$this->touchLastActivity($user);
}
);
}
cache
The cache
function allows you to cache the result of a $closure
of logic for $ttl
and bind the cached result to the model's cache collection
.
When flushCache
is fired on the model it's cache collection
will be emptied and all the model cache cleared.
$result = $repository->cache($key, $seconds, $closure);
$roles = app(Anomaly\UsersModule\Role\Contract\RoleRepositoryInterface::class);
$guest = $roles->cache(
'anomaly.module.users::roles.guest',
60 * 60 * 24, // 1 day
function () use ($roles) {
return $roles->findBySlug('guest');
}
);
cacheForever
The cacheForever
function allows you to cache the result of a $closure
of logic and bind
the cached result to the model's cache collection
.
The result will be cached forever or until flushCache
is fired on the model.
$result = $repository->cache($key, $seconds, $closure);
$roles = app(Anomaly\UsersModule\Role\Contract\RoleRepositoryInterface::class);
$guest = $roles->cacheForever(
'anomaly.module.users::roles.guest',
function () use ($roles) {
return $roles->findBySlug('guest');
}
);
flushCache
The flushCache
function clears all model cache including it's cache collection
.
This function is automatically fired anytime an entry is created
, updated
, deleted
, and any time it's database information is altered.
$repository->flushCache();
Entry Repository
Entry models are used for stream entry models specifically. They will have all the above functions as well.
sorted
The sorted
function returns all entries sorted by direction
based on it's title column or sortable order if a sortable stream.
$collection = $repository->sorted($direction = 'asc');
{% set collection = entries(namespace, stream).sorted(direction = 'asc') %}
first
The first
function returns the first entry sorted by direction
based on it's title column or sortable order if a sortable stream.
$entry = $repository->first($direction = 'asc');
{% set entry = entries(namespace, stream).first(direction = 'asc') %}
lastModified
The lastModified
function returns the last modified entry
based on it's created_at
and updated_at
columns.
$collection = $repository->sorted($direction = 'asc');
{% set collection = entries(namespace, stream).sorted(direction = 'asc') %}