axn / laravel-repository
此包已被弃用且不再维护。未建议替代包。
为Laravel 5实现仓库设计模式
1.2.1
2016-11-02 11:33 UTC
Requires
- illuminate/database: ^5.0
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(); }