touhidurabir/laravel-model-sanitize

一个用于处理模型数据清理过程的 Laravel 扩展包,以创建或更新模型记录。

1.1.2 2023-04-01 08:11 UTC

This package is auto-updated.

Last update: 2024-08-30 01:44:56 UTC


README

一个简单的扩展包,用于清理模型数据以创建/更新表记录。

安装

使用 composer 安装此包

composer require touhidurabir/laravel-model-sanitize

它做什么?

Sanitize 扩展包会在创建或更新时清理传递的 attributes,使其与适当的模型填充属性匹配。

一个模型基于多个与它关联的属性具有表模式。当我们尝试创建一个新的模型记录或更新现有的模型记录时,我们必须提供一个数组属性,该数组属性与那些属性或表列名称正确映射。例如

$user = User::create([
    'email' => 'somemail@test.com',
    'password' => Hash::make('password')
]);

上述代码将正常运行,因为用户表中同时存在 emailpassword 列。但对于以下代码

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', 
]

sanitizegibberish 方法可用于检查或手动清理和评估传递给创建/更新模型记录的无效数据。

还可以使用静态方法 disableSanitizationenableSanitization 在运行时启用/禁用清理过程。例如,

User::disableSanitization(); // disable the sanitization process
User::enableSanitization();  // enable the sanitization process if previously disabled

贡献

欢迎拉取请求。对于重大更改,请首先打开一个问题来讨论您希望更改的内容。

请确保根据需要更新测试。

许可

MIT