cerbero/eloquent-inspector

检查 Laravel Eloquent 模型以收集属性、关系等信息。

1.0.0 2022-01-18 02:07 UTC

This package is auto-updated.

Last update: 2024-09-18 08:17:08 UTC


README

Author PHP Version Laravel Version Octane Compatibility Build Status Coverage Status Quality Score Latest Version Software License PSR-12 Total Downloads

检查 Laravel Eloquent 模型以收集属性、关系等信息。

安装

通过 Composer

composer require cerbero/eloquent-inspector

用法

要检查 Eloquent 模型,我们可以简单地将其类名传递给 inspect() 方法

use App\Models\User;
use Cerbero\EloquentInspector\Inspector;

$inspector = Inspector::inspect(User::class);

每次检查新模型时都会创建一个 Inspector 单例,这允许我们在运行检查逻辑一次的情况下多次检查相同的模型。

如果我们需要释放内存或清理一些检查的模型信息,我们可以刷新所有模型检查,刷新单个模型检查,或告诉检查忘记其数据

// flush information of all inspected models
Inspector::flush();

// flush information of an inspected model
Inspector::flush(User::class);

// forget information of the current inspection
Inspector::inspect(User::class)->forget();

要从 Inspector 获取检查的模型的类,我们可以调用 getModel()

$model = Inspector::inspect(User::class)->getModel(); // App\Models\User

方法 getUseStatements() 返回一个包含模型中所有 use 语句的数组,键是类名或别名

use Illuminate\Database\Eloquent\Model;
use Foo\Bar as Baz;

class User extends Model
{
    // ...
}

$useStatements = Inspector::inspect(User::class)->getUseStatements();
/*
[
    'Model' => 'Illuminate\Database\Eloquent\Model',
    'Baz' => 'Foo\Bar',
]
*/

调用 getProperties() 对模型数据库表进行扫描,并返回一个包含属性信息的 Property 实例数组。数组键是属性名称

$properties = Inspector::inspect(User::class)->getProperties();
/*
[
    'id' => <Cerbero\EloquentInspector\Dtos\Property>,
    'name' => <Cerbero\EloquentInspector\Dtos\Property>,
    ...
]
*/

$properties['id']->name; // id
$properties['id']->type; // int
$properties['id']->dbType; // integer
$properties['id']->nullable; // false
$properties['id']->default; // null

要检查模型的关联关系,我们可以调用 getRelationships() 方法。结果是包含所有关联信息的 Relationship 实例数组,键是关联名称

$relationships = Inspector::inspect(User::class)->getRelationships();
/*
[
    'posts' => <Cerbero\EloquentInspector\Dtos\Relationship>,
    'tags' => <Cerbero\EloquentInspector\Dtos\Relationship>,
    ...
]
*/

$relationships['posts']->name; // posts
$relationships['posts']->type; // hasMany
$relationships['posts']->class; // Illuminate\Database\Eloquent\Relations\HasMany
$relationships['posts']->model; // App\Models\Post
$relationships['posts']->relatesToMany; // true

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

测试

composer test

贡献

请参阅 CONTRIBUTINGCODE_OF_CONDUCT 了解详细信息。

安全

如果您发现任何安全问题,请通过电子邮件 andrea.marco.sartori@gmail.com 报告,而不是使用问题跟踪器。

致谢

许可

MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。