axn/laravel-repository

此包已被弃用且不再维护。未建议替代包。

为Laravel 5实现仓库设计模式

1.2.1 2016-11-02 11:33 UTC

This package is auto-updated.

Last update: 2022-02-01 12:56:41 UTC


README

弃用

Laravel Repository

此包为Laravel 5提供仓库模式的基功能。

安装

使用Composer包含此包

composer require axn/laravel-repository

使用此包无需包含任何服务提供者。只需确保仓库类扩展了Axn\Repository\Eloquent\EloquentRepository类,并在构造函数中注入模型。

namespace App\Repositories;

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

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

使用

提供的基本(公共)方法如下

  • 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)

选择列(参数$columns)

$columns参数允许选择要检索的列。它可以提供为数组,也可以提供为字符串(每列由逗号分隔)。还可以在关系中进行检索。示例

// 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'
]);

过滤条件(参数$criteria)

$criteria参数允许过滤要检索的记录。过滤也可以在关系上执行。示例

$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']);

也可以在条件中使用运算符。可能的运算符列表如下

  • EQUAL(默认)
  • NOT_EQUAL
  • LIKE
  • NOT_LIKE
  • GREATER_THAN
  • GREATER_EQUAL
  • LESS_THAN
  • LESS_EQUAL
  • IN
  • NOT_IN

示例

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

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

排序规则(参数$order)

$order参数允许指定排序规则(ORDER BY)。此参数必须以字符串形式提供。与$columns参数类似,可以指定多个规则,通过逗号分隔,并在字段名称后指定方向(asc或desc),用空格分隔。示例

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

限制和偏移量(参数 $limit 和 $offset)

getAll* 方法中可以指定 $limit$offset 参数,这允许只选择有限数量的记录。

向 Eloquent Repository 添加方法

当然,如果基本方法不足以使用,可以给仓库添加方法。以下(受保护的)方法可以用来构建查询(仅限 Eloquent Repository)

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

示例

// 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();
}