antriver / laravel-repositories
Laravel 的模型仓库。
Requires
- php: >=8.1
- laravel/framework: >=10.0
Requires (Dev)
- mockery/mockery: ^1.6
- orchestra/testbench: ^8.19
- phpunit/phpunit: ^10.5
- dev-master
- 10.0.1
- 10.0.0
- v3.x-dev
- 3.0.2
- 3.0.1
- 3.0.0
- 2.3.1
- 2.3.0
- 2.2.5
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.2
- 2.0.1
- 2.0.0
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.9
- 1.5.8
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- 0.0.1
- dev-actions
This package is auto-updated.
Last update: 2024-09-03 14:38:14 UTC
README
这里提供的类允许您使用仓库模式对 Laravel 模型进行 CRUD 操作。
安装
composer require antriver/laravel-repositories
基本用法
创建一个扩展 AbstractRepository
的类。
<?php
namespace App\Repositories;
use Antriver\LaravelRepositories\Base\AbstractRepository;
use App\Models\Post;
class PostRepository extends AbstractRepository
{
public function getModelClass(): string
{
return Post::class;
}
}
现在您拥有了一个 Post 模型的仓库,具有以下方法
find(int $modelId)
通过其主键返回单个模型,或返回 null。
findOrFail(int $modelId)
通过其主键返回单个模型,或抛出 ModelNotFoundException
。
findMany(array $modelIds)
返回多个模型的集合。结果将仅包含找到的模型。
findOneBy(string $field, $value)
返回匹配 field
和 value
的单个模型,或返回 null。
findOneByOrFail(string $field, $value)
返回匹配 field
和 value
的单个模型,或抛出 ModelNotFoundException
。
persist(Model $model)
将给定的模型保存到数据库。
remove(Model $model)
从数据库中删除给定的模型。
incremenet(Model $model, $column, $amount)
将指定列的值增加指定的数量。
(即 UPDATE table SET column = column + 1
);
decrement(Model $model, $column, $amount)
将指定列的值减少指定的数量。
(即 UPDATE table SET column = column - 1
);
缓存仓库
如果您扩展 AbstractCachedRepository
而不是 AbstractRepository
,则将拥有所有相同的功能,但是以下操作将首先在缓存中查找模型。
-
find - 通过其主键缓存模型。
-
findOrFail - 通过其主键缓存模型。
-
findMany - 使用与
find
相同的缓存键来定位每个模型。 -
findOneBy - 缓存找到的匹配值模型的 primary key。未来的调用将查找匹配的 ID 并然后调用
find
。 -
findOneByOrFail - 缓存找到的匹配值模型的 primary key。未来的调用将查找匹配的 ID 并然后调用
find
。 -
persist - 这还将模型存储在缓存中,在它被保存到数据库后。
-
remove - 这还将模型从缓存中删除,在它被保存到数据库后。
缓存仓库还有以下附加方法
forgetById(int $modelId)
忘记模型的缓存副本(不会从数据库中删除)。
forgetByModel(Model $model)
忘记模型的缓存副本(不会从数据库中删除)。
refreshById(int $modelId)
使用在数据库中找到的最新版本更新模型的缓存副本。
软删除仓库
如果您的模型支持软删除(Illuminate\Database\Eloquent\SoftDeletes
特性),则上述 find 等方法将排除软删除模型从结果中。
如果您扩展 AbstractSoftDeletableRepository
而不是 AbstractRepository
,您将获得以下附加方法
findWithTrashed(int $modelId)
findWithTrashedOrFail(int $modelId)
即使模型已被软删除,也通过主键返回单个模型。
findTrashed(int $modelId)
findTrashedOrFail(int $modelId)
仅当模型已被软删除时,通过主键返回模型。
findOneByWithTrashed(string $field $value)
findOneByWithTrashedOrFail(string $field, $value)
返回单个模型,即使该模型已软删除,只要 field
字段匹配 value
。
findTrashedOneBy(string $field, $value)
findTrashedOneByOrFail(string $field, $value)
返回单个模型,只有当模型被软删除且 field
字段匹配 value
时。
可缓存软删除仓库
这结合了 AbstractCachedRepository
和 AbstractSoftDeletableRepository
的功能。
使用此功能时,模型的缓存将包括软删除的模型。这适用于主键缓存和字段/值缓存。在仓库内部进行筛选,如果请求的是已删除或未删除的模型,则返回 null 或抛出异常。