touhidurabir / laravel-model-sanitize
一个用于处理模型数据清理过程的 Laravel 扩展包,以创建或更新模型记录。
Requires
- php: >=7.2.0
Requires (Dev)
- illuminate/container: ^8.54||^9.0||^10.0
- illuminate/database: ^8.54||^9.0||^10.0
- illuminate/events: ^8.54||^9.0||^10.0
- illuminate/support: ^8.54||^9.0||^10.0
- orchestra/testbench: ^6.20
- phpunit/phpunit: ^9.5
README
一个简单的扩展包,用于清理模型数据以创建/更新表记录。
安装
使用 composer 安装此包
composer require touhidurabir/laravel-model-sanitize
它做什么?
Sanitize
扩展包会在创建或更新时清理传递的 attributes
,使其与适当的模型填充属性匹配。
一个模型基于多个与它关联的属性具有表模式。当我们尝试创建一个新的模型记录或更新现有的模型记录时,我们必须提供一个数组属性,该数组属性与那些属性或表列名称正确映射。例如
$user = User::create([ 'email' => 'somemail@test.com', 'password' => Hash::make('password') ]);
上述代码将正常运行,因为用户表中同时存在 email
和 password
列。但对于以下代码
User::create([ 'email' => 'somemail@test.com', 'password' => 'password', 'data' => 'some data' ]);
如果用户表中不存在 data
列,它将抛出 \Illuminate\Database\QueryException
。
Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1 table users has no column named data (SQL: insert into "users" ("email", "password", "data", "updated_at", "created_at") values (somemail@mail.com, password, data, 2021-11-14 20:11:04, 2021-11-14 20:11:04))
Sanitize
扩展包旨在通过在模型中包含 Sanitizable
特性来简化此类情况的处理。
$data = [ 'email' => 'somemail@test.com', 'password' => 'password', 'data' => 'some data' ]; User::create($data);
如果在上面的 User
模型类中使用 Sanitizable
特性,上述代码将正常运行。它将清理传递的属性到模型填充属性和表列,从而移除其中的 额外或不可用属性
。
它将如何有帮助?
此包的一个很好的用例是,当需要从验证过的请求数据创建多个模型实例时。例如
$validated = $request->validated(); $user = User::create($validated); $profile = $user->profile->create($validated);
我个人在我的许多 Laravel 应用中使用了这种方法。
用法
在需要附加 uuid 的模型中使用 Sanitizable
特性
use Touhidurabir\ModelSanitize\Sanitizable; use Illuminate\Database\Eloquent\Model; class User extends Model { use Sanitizable; }
就这样。它将自动适用于以下所有方法
- updateOrCreate
- firstOrCreate
- firstOrNew
- create
- forceCreate
- update
此包还包括一些辅助方法,可用于手动处理清理过程。
sanitize
静态方法将清理给定的属性列表,并将其作为数组返回为可用的和有效的属性
$data = [ 'email' => 'somemail@test.com', 'password' => 'password', 'data' => 'some data', 'name' => 'Test User' ]; User::sanitize($data);
它将返回如下内容
[ 'email' => 'somemail@test.com', 'password' => 'password', 'name' => 'Test User' ]
gibberish
静态方法将清理给定的属性列表,并将其作为数组返回为垃圾/不可用属性
$data = [ 'email' => 'somemail@test.com', 'password' => 'password', 'data' => 'some data', 'name' => 'Test User' ]; User::gibberish($data);
它将返回如下内容
[ 'data' => 'some data', ]
sanitize
和 gibberish
方法可用于检查或手动清理和评估传递给创建/更新模型记录的无效数据。
还可以使用静态方法 disableSanitization
和 enableSanitization
在运行时启用/禁用清理过程。例如,
User::disableSanitization(); // disable the sanitization process User::enableSanitization(); // enable the sanitization process if previously disabled
贡献
欢迎拉取请求。对于重大更改,请首先打开一个问题来讨论您希望更改的内容。
请确保根据需要更新测试。