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']]]
Supporting organizations: 
made on company time

Project information

Releases