This module provides a system to create custom repositories for entities, allowing for simplified querying and data retrieval. You can extend base repository classes to define specific queries for your content types or other entities.
Provides a basic API for queries. This module won't do much by itself.
Extend the base classes and create your own repository classes.
Usage
e.g. when creating a repository for the news content type.
Create a service
news.repository.news:
class: Drupal\news\Repository\NewsRepository
parent: entity_repository.repository.node
Create a repository class
The property $bundles limits the results to the given bundles. The base
NodeRepository class contains a lot of queries by default like findAll().
namespace Drupal\news\Repository;
use Drupal\entity_repository\Repository\NodeRepository;
/**
* Class NewsRepository.
*
* @package Drupal\news\Repository
*/
class NewsRepository extends NodeRepository {
protected $bundles = ['news'];
/**
* {@inheritdoc}
*/
public function findByTags(array $tags = [], int $pager = NULL, $sort = NULL) : array {
$query = $this->getBaseQuery();
if (!empty($tags)) {
$query->condition('field_news_tags', $tags, 'IN');
}
if ($pager) {
$query->pager($pager);
}
if ($sort) {
$query->sort($sort['field'], $sort['dir'], $this->getLangCode());
}
return $this->getResults($query);
}
}
<h3>Use the repository class</h3>
<?php
$nodes = \Drupal::service('news.repository.news')->findAll();
Create a repository without a custom class
When you don't need custom queries, you can create a repository without without creating an empty repository class.
You can add a new service and call the setBundles or setVocabularies for taxonomy terms on the base class.
news.repository.news:
class: Drupal\entity_repository\Repository\NodeRepository
arguments:
- '@database'
- '@entity_type.manager'
- '@language_manager'
calls:
- [setBundles, [['news']]]