watheqalshowaiter / model-required-fields
获取模型所需字段,不包括可为空的字段、主键字段以及默认字段的字段。
Requires
- php: >=7.4
- illuminate/contracts: ^11.0||^10.0||^9.0||^8.0||^7.0||^6.0||^5.0
Requires (Dev)
- nunomaduro/collision: ^8.1.1||^7.10.0||^6.0||^5.0||^4.0||^3.2
- orchestra/testbench: ^9.0.0||^8.22.0||^7.0||^6.0||^5.0||^4.0
README
模型所需字段
获取所需模型字段,排除主键、可为空字段和默认字段的字段。
安装
您可以通过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)。有关更多信息,请参阅 许可文件。