watheqalshowaiter/model-required-fields

获取模型所需字段,不包括可为空的字段、主键字段以及默认字段的字段。

1.13.3 2024-08-07 12:58 UTC

This package is auto-updated.

Last update: 2024-09-26 19:39:14 UTC


README

Package cover

模型所需字段

Latest Version on Packagist Total Downloads GitHub Code Style Action Status GitHub Tests For Laravel Versions Action Status GitHub Tests For Databases Action Status

获取所需模型字段,排除主键、可为空字段和默认字段的字段。

安装

您可以通过Composer安装此包

composer require watheqalshowaiter/model-required-fields --dev

我们推荐使用 --dev,因为通常您会在开发环境中使用它,而不是在生产环境中。

使用方法

我们假设 User 模型具有以下默认模式

Schema::create('users', function (Blueprint $table) {
    $table->id(); // primary key
    $table->string('name'); // required
    $table->string('email')->unique(); // required
    $table->timestamp('email_verified_at')->nullable(); // nullable
    $table->string('password'); // required
    $table->rememberToken(); // nullable
    $table->timestamps(); // nullable
});
  • RequiredFields 特性添加到您的模型中
use WatheqAlshowaiter\ModelRequiredFields\RequiredFields;

class User extends Model
{
   use RequiredFields;
}
  • 现在可以如下使用特性
User::getRequiredFields(); // returns ['name', 'email', 'password']

这就完成了!

另一个复杂表格

假设 Post 模型具有以下字段

Schema::create('posts', function (Blueprint $table) {
    $table->uuid('id')->primary(); // primary key
    $table->foreignId('user_id')->constrained(); // required
    $table->foreignId('category_id')->nullable(); // nullable
    $table->uuid(); // required (but will be changed later) 👇
    $table->ulid('ulid')->nullable(); // nullable (but will be changed later) 👇
    $table->boolean('active')->default(false); // default
    $table->string('title'); // required
    $table->json('description')->nullable(); // nullable (but will be changed later) 👇
    $table->string('slug')->nullable()->unique(); // nullable
    $table->timestamps(); // nullable
    $table->softDeletes(); // nullable
});

// later migration..
Schema::table('posts', function(Blueprint $table){
    $table->json('description')->nullable(false)->change(); // required
    $table->ulid('ulid')->nullable(false)->change(); // required
    $table->uuid()->nullable()->change(); // nullable
});
  • 我们可以将 RequiredFields 特性添加到 Post 模型
use WatheqAlshowaiter\ModelRequiredFields\RequiredFields;

class Post extends Model
{
   use RequiredFields;
}
  • 现在可以如下使用特性
Post::getRequiredFields(); // returns ['user_id', 'ulid', 'title', 'description']

还有更多

我们可以灵活地获取带有可为空字段、默认值、主键的所需字段,或者它们的组合,或者返回所有字段。您可以使用这些方法与这些结果一起使用

// The default parameters, only required fields
Post::getRequiredFields(
    $withNullables = false,
    $withDefaults = false,
    $withPrimaryKey = false
);
// or
Post::getRequiredFields();
// returns ['user_id', 'ulid', 'title', 'description']
// get required fields with nullables
Post::getRequiredFields(
    $withNullables = true,
    $withDefaults = false,
    $withPrimaryKey = false
);
// or
Post::getRequiredFields(
    $withNullables = true,
);
// or
Post::getRequiredFields(true);
// or
Post::getRequiredFieldsWithNullables();
// returns ['user_id', 'category_id', 'uuid', 'ulid', 'title', 'description', 'slug', 'created_at', 'updated_at', 'deleted_at']
// get required fields with defaults
Post::getRequiredFields(
    $withNullables = false,
    $withDefaults = true,
    $withPrimaryKey = false
);
// or
Post::getRequiredFieldsWithDefaults();
// returns ['user_id', 'ulid', 'active', 'title', 'description']
// get required fields with primary key
Post::getRequiredFields(
    $withNullables = false,
    $withDefaults = false,
    $withPrimaryKey = true
);
// or
Post::getRequiredFieldsWithPrimaryKey();
// returns ['id', 'user_id', 'ulid', 'title', 'description']
// get required fields with nullables and defaults
Post::getRequiredFields(
    $withNullables = true,
    $withDefaults = true,
    $withPrimaryKey = false
);
// or
Post::getRequiredFieldsWithNullablesAndDefaults();
// returns ['user_id', 'category_id', 'uuid', 'ulid', 'active', 'title', 'description', 'slug', 'created_at', 'updated_at', 'deleted_at']
// get required fields with nullables and primary key
Post::getRequiredFields(
    $withNullables = true,
    $withDefaults = false,
    $withPrimaryKey = true
);
// or
Post::getRequiredFieldsWithNullablesAndPrimaryKey();
// returns ['id', 'user_id', 'category_id', 'uuid', 'ulid', 'title', 'description', 'slug', 'created_at', 'updated_at', 'deleted_at']
// get required fields with defaults and primary key
Post::getRequiredFields(
    $withNullables = false,
    $withDefaults = true,
    $withPrimaryKey = true
);
// or
Post::getRequiredFieldsWithDefaultsAndPrimaryKey();
// returns ['id', 'user_id', 'ulid', 'active', 'title', 'description']
// get required fields with defaults and primary key
Post::getRequiredFields(
    $withNullables = true,
    $withDefaults = true,
    $withPrimaryKey = true
);
// or
Post::getAllFields();
// returns ['id', 'user_id', 'category_id', 'uuid', 'ulid', 'active', 'title', 'description', 'slug', 'created_at', 'updated_at', 'deleted_at']

为什么?

问题

我想为没有测试的遗留项目添加测试。我想添加测试,但找不到工厂,所以我尝试构建它们。然而,由于一些表格字段过多,很难确定测试基本功能所需的所需字段。

解决方案

为了解决这个问题,我创建了一个简单的特性,可以轻松检索所需字段。后来,我添加了对旧版Laravel版本的支持,因为那里的用例最多。最终,我将它提取为这个包。

因此,简而言之,如果以下情况适用,此包很有用:

  • 您想为从头开始的项目构建工厂或测试。
  • 您正在处理遗留项目,并且不想在创建表时遇到SQL错误。
  • 您的表中有很多字段,并且想要快速获取所需字段。
  • 或者任何您认为有用的用例。

功能

✅ 支持 Laravel 版本:11, 10, 9, 8, 7 和 6。

✅ 支持 PHP 版本:8.2, 8.1, 8.0 和 7.4。

✅ 支持 SQL 数据库:SQLite、MySQL/MariaDB、PostgreSQL 和 SQL Server。

✅ 完全使用 PHPUnit 自动化测试。

✅ 完整的 GitHub Action CI 管道以格式化代码并针对所有 Laravel 和 PHP 版本进行测试。

测试

composer test

更新日志

有关最近更改的更多信息,请参阅 更新日志

贡献

如果您有任何改进或修复错误的想法或建议,您的贡献受到欢迎。我鼓励您查看 待办事项,这些是需要添加的最重要功能。如果您有其他想法,请首先提交问题进行讨论或报告错误,然后进行拉取请求。

安全漏洞

如果您发现任何安全漏洞,请毫不犹豫地通过 watheqalshowaiter[at]gmail[dot]com 联系我以修复它们。

鸣谢

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件