2017 © Pedro Peláez
 

library laravel-repository

Implementing the design pattern repositories for Laravel 5

image

axn/laravel-repository

Implementing the design pattern repositories for Laravel 5

  • Wednesday, November 2, 2016
  • by axn
  • Repository
  • 2 Watchers
  • 0 Stars
  • 1 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 8 Versions
  • 0 % Grown

The README.md

abandoned, (*1)

Laravel Repository

Ce package offre des fonctionnalités de base pour le repository pattern avec Laravel 5., (*2)

Installation

Inclure le package avec Composer :, (*3)

composer require axn/laravel-repository

Aucun service provider n'est à inclure pour utiliser ce package. Il y a juste besoin que les classes des repositories étendent la classe Axn\Repository\Eloquent\EloquentRepository et qu'il y ait une injection du modèle dans le constructeur :, (*4)

namespace App\Repositories;

use Axn\Repository\Eloquent\EloquentRepository;
use App\Models\User;

class EloquentUserRepository extends EloquentRepository
{
    public function __construct(User $model)
    {
        parent::__construct($model);
    }
}

Utilisation

Les méthodes de base (publiques) fournies sont les suivantes :, (*5)

  • getById($id, $columns = null)
  • getBy(array $criteria, $columns = null)
  • getAll($columns = null, $order = null, $limit = null, $offset = null)
  • getAllByIds(array $ids, $columns = null, $order = null, $limit = null, $offset = null)
  • getAllBy(array $criteria, $columns = null, $order = null, $limit = null, $offset = null)
  • getAllDistinctBy(array $criteria, $columns = null, $order = null, $limit = null, $offset = null)
  • paginate($perPage, array $criteria = [], $columns = null, $order = null)
  • exists($id)
  • count(array $criteria = [])
  • create(array $data)
  • createMany(array $datalist)
  • updateById($id, array $data)
  • updateManyByIds(array $ids, array $data)
  • updateBy(array $criteria, array $data)
  • updateOrCreate(array $attributes, array $data)
  • deleteById($id)
  • deleteManyByIds(array $ids)
  • deleteBy(array $criteria)

Sélection de colonnes (paramètre $columns)

Le paramètre $columns permet de sélectionner les colonnes à récupérer. Il peut être fourni sous forme de tableau, ou bien sous forme de chaîne (chaque colonne séparée par une virgule). La récupération peut également se faire dans les relations. Exemple :, (*6)

// Colonnes sous forme de tableau :
$users = $userRepository->getAll([
    'username',
    'email'
]);

// Ou bien sous forme de chaîne de caractères :
$users = $userRepository->getAll('username, email');

// Avec sélection dans les relations :
$users = $userRepository->getAll([
    'username',
    'email',
    'roles.display_name',
    'roles.permissions.display_name'
]);

Critères de filtrage (paramètre $criteria)

Le paramètre $criteria permet de filtrer les enregistrements à récupérer. Le filtrage peut également se faire sur les relations. Exemple :, (*7)

$users = $userRepository->getAllBy(['email' => 'john.dupont@axn.fr']);

// Avec critères de filtrage sur les relations (ici seront récupérés uniquement
// les utilisateurs ayant le rôle "admin") :
$users = $userRepository->getAllBy(['roles.name' => 'admin']);

Des opérateurs peuvent aussi être utilisés sur les critères. La liste des opérateurs possibles est la suivante :, (*8)

  • EQUAL (par défaut)
  • NOT_EQUAL
  • LIKE
  • NOT_LIKE
  • GREATER_THAN
  • GREATER_EQUAL
  • LESS_THAN
  • LESS_EQUAL
  • IN
  • NOT_IN

Exemple :, (*9)

$users = $userRepository->getAllBy([
    'email LIKE' => '%@axn.fr'
]);

// IS NOT NULL
$users = $userRepository->getAllBy([
    'email NOT_EQUAL' => null
]);

Règles de tri (paramètre $order)

Le paramètre $order permet de spécifier des règles de tri (ORDER BY). Ce paramètre doit être fourni exclusivement sous forme de chaîne de caractères. Comme pour le paramètre $columns, plusieurs règles peuvent être spécifiées en les séparant par des virgules, et il est possible de préciser la direction (asc ou desc) après le nom du champ en séparant par un espace. Exemple :, (*10)

$users = $userRepository->getAll(null, 'date_inscription desc, lastname, firstname');

Limitation et décalage (paramètres $limit et $offset)

Aux méthodes getAll* peuvent être spécifiés les paramètres $limit et $offset qui permettent de ne sélectionner qu'un nombre limité d'enregistrements., (*11)

Ajout de méthodes à un repository Eloquent

Il est bien sûr possible d'ajouter des méthodes à un repository, si les méthodes de base ne sont pas suffisantes. Les méthodes suivantes (protégées) peuvent alors être utilisées pour construire des requêtes (repository Eloquent, uniquement) :, (*12)

  • model(array $attributes = [], $exists = false)
  • query()
  • filter($query, array $criteria, $columns = null, $order = null, $limit = null, $offset = null)

Exemples :, (*13)

// App\Repositories\EloquentUserRepository

public function getAllWithTrashed($columns = null, $order = null, $limit = null, $offset = null)
{
    $query = $this->model()->withTrashed();

    return $this->filter($query, [], $columns, $order, $limit, $offset)->get();
}

public function getAllActive($columns = null, $order = null, $limit = null, $offset = null)
{
    $query = $this->query()->where('active', 1);

    return $this->filter($query, [], $columns, $order, $limit, $offset)->get();
}

public function getAllForDataTable(array $where = [])
{
    $query = $this->query()
        ->join('profils', 'profils.id', '=', 'users.profil_id')
        ->select([
            'users.id',
            'users.username',
            'users.email',
            'profils.name'
        ]);

    if (!empty($where['profil_id'])) {
        $query->where('profils.id', $where['profil_id']);
    }

    return $query->getQuery()->get();
}

The Versions

02/11 2016

dev-master

9999999-dev https://github.com/AXN-Informatique/laravel-repository

Implementing the design pattern repositories for Laravel 5

  Sources   Download

MIT

The Requires

 

by AXN Informatique

02/11 2016

1.2.1

1.2.1.0 https://github.com/AXN-Informatique/laravel-repository

Implementing the design pattern repositories for Laravel 5

  Sources   Download

MIT

The Requires

 

by AXN Informatique

22/03 2016

1.2.0

1.2.0.0 https://bitbucket.org/axn/laravel-repository

Implémentation du design pattern repositories pour Laravel 5

  Sources   Download

MIT

The Requires

 

by AXN Informatique

28/10 2015

v1.1.x-dev

1.1.9999999.9999999-dev

  Sources   Download

The Requires

 

26/10 2015

1.1.0

1.1.0.0

  Sources   Download

The Requires

 

23/10 2015

v1.0.x-dev

1.0.9999999.9999999-dev

  Sources   Download

The Requires

 

23/10 2015

1.0.1

1.0.1.0

  Sources   Download

The Requires

 

08/09 2015

1.0.0

1.0.0.0

  Sources   Download

The Requires