anfischer / cloner
一个允许轻松递归克隆和持久化Laravel Eloquent模型的包
v0.4.1
2022-09-22 13:28 UTC
Requires
- php: >=7.3
- illuminate/database: ^6.0|^7.0|^8.0|^9.0
- illuminate/support: ^6.0|^7.0|^8.0|^9.0
- laravel/legacy-factories: ^1.0
Requires (Dev)
- fakerphp/faker: ^1.18
- mockery/mockery: ^1.1
- orchestra/testbench: ^4.0|^5.0|^6.0|^7.0
- phpunit/phpunit: ^9.5.24
- squizlabs/php_codesniffer: ^3.2
This package is auto-updated.
Last update: 2024-09-03 22:15:16 UTC
README
一个允许轻松递归克隆和持久化Laravel Eloquent模型的包,包括
- 递归克隆Eloquent模型及其关系而不强制持久化,允许在将克隆的模型保存到数据库之前对其进行内存中的更改
- 持久化递归关系,包括克隆的关联数据
由于这是我在客户项目中经常依赖的功能,我决定将其提取到一个包中。然而,这也意味着您的使用效果可能会有所不同,因此欢迎提交pull请求 - 请参阅CONTRIBUTING以获取详细信息。
结构
src/
tests/
vendor/
版本兼容性
安装
通过Composer
$ composer require anfischer/cloner
该包将自动注册其服务提供者。
使用方法
基本用法
use Anfischer\Cloner; $clone = (new CloneService)->clone($someEloquentModel); $persistedModel = (new PersistenceService)->persist($clone); or $cloner = new Cloner(new CloneService, new PersistenceService); $clone = $cloner->clone($someEloquentModel); $persistedModel = $cloner->persist($clone); or $clone = \Cloner::clone($someEloquentModel); $persistedModel = \Cloner::persist($clone);
便捷方法
Cloner还公开了一个同时进行克隆和持久化的便捷方法
$cloner = new Cloner(new CloneService, new PersistenceService); $persistedModel = $cloner->cloneAndPersist($someEloquentModel);
克隆模型映射
您可能希望跟踪哪些模型被克隆及其克隆的键。为此,Cloner记录这些键。
$cloneService = new CloneService() // $personModel->id === 1; // gettype($personModel) === App\Person; $clone = ($cloneService)->clone($personModel); $persistedModel = (new PersistenceService)->persist($clone); // or $persistedModel = $clone->save(); // $persistedModel->id === 2 $map = $cloneService->getKeyMap(); // $map === [App\Person => [1 => 2]];
配置
要发布配置文件到config/cloner.php,请运行
php artisan vendor:publish --provider="Anfischer\Cloner\ClonerServiceProvider"
Cloner默认支持各种持久化策略。这些可以通过修改config/cloner.php中的配置来配置。
例如
return [
'persistence_strategies' => [
Illuminate\Database\Eloquent\Relations\HasOne::class =>
Anfischer\Cloner\Strategies\PersistHasOneRelationStrategy::class,
Illuminate\Database\Eloquent\Relations\HasMany::class =>
Anfischer\Cloner\Strategies\PersistHasManyRelationStrategy::class,
Illuminate\Database\Eloquent\Relations\BelongsToMany::class =>
Anfischer\Cloner\Strategies\PersistBelongsToManyRelationStrategy::class,
// You can add your own strategies for relations
SomePackage\Relations\CustomRelation =>
App\Cloner\PersistenceStrategies\PersistSomePackageCustomRelationStrategy
]
];
变更日志
有关最近更改的更多信息,请参阅CHANGELOG。
测试
$ composer test
安全
如果您发现任何安全相关的问题,请通过电子邮件kontakt@season.dk联系,而不是使用问题跟踪器。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。