Module Description
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']]]
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']]]
Module Link
Project Usage
129
Security Covered
Covered By Security Advisory
Version Available
Production
Module Summary
This module aims to provide a basic API for queries and allows users to extend base classes and create their own repository classes, such as for news content types.
Data Name
entity_repository