Drupal is a registered trademark of Dries Buytaert
Protected Pages 3.0.0 Major update available for module protected_pages (3.0.0). Commerce Core 3.3.8 Minor update available for module commerce (3.3.8). Search API HTML Element Filter 1.0.7 Minor update available for module search_api_html_element_filter (1.0.7). Layout Builder Reorder 2.0.1 Minor update available for module layout_builder_reorder (2.0.1). Ban 1.1.0 Minor update available for module ban (1.1.0). Field Formatter Range 2.0.0 Major update available for module field_formatter_range (2.0.0). Field Formatter Range 8.x-1.8 Minor update available for module field_formatter_range (8.x-1.8). UI Patterns (SDC in Drupal UI) 2.0.18 Minor update available for module ui_patterns (2.0.18). Search API Solr 4.3.11 Module search_api_solr updated after 14 months of inactivity (4.3.11). Provus Mega Menu Module provus_mega_menu crossed 1,000 active installs.

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']]]

Activity

Total releases
1
First release
Oct 2025
Latest release
8 months ago
Releases (12 mo)
1 ▲ from 0
Maintenance
Slowing

Releases

Version Type Release date
2.0.5 Stable Oct 21, 2025