boktoso-enterprise/laravel-model-doc

Laravel 模型 PHPDoc 生成器

v0.0.4 2023-08-21 15:04 UTC

This package is auto-updated.

Last update: 2024-09-21 17:27:06 UTC


README

romanzipp/Laravel-Model-Doc 分支出来

为 Laravel 模型生成 PHPDoc 注释,包括 数据库列关系访问器查询作用域工厂

内容

安装

composer require boktoso-enterprise/laravel-model-doc --dev

配置

将配置复制到配置文件夹

php artisan vendor:publish --provider="boktoso-enterprise\ModelDoc\Providers\ModelDocServiceProvider"

用法

php artisan model-doc:generate

有关更多特定用例,请参阅 配置文件

准备你的模型

  1. 添加相应的 表名
  2. 添加返回 类型关系 方法
  3. 添加返回 类型访问器 方法
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class MyModel extends Model
{
    protected $table = 'models'; // 1. Add the corresponding table name
    
    public function teams(): HasMany // 2. Add relation methods return types
    {
        return $this->hasMany(Team::class);
    }
    
    public function getNameAttribute(): string // 3. Add accessor methods return types
    {
        return ucfirst($this->name);
    }
}

示例

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

/**
 * @property string $id
 * @property string $title
 * @property string $pretty_title
 * @property string|null $icon
 * @property int $order
 * @property bool $enabled
 * @property array $children
 * @property \Illuminate\Support\Carbon|null $created_at
 * @property \Illuminate\Support\Carbon|null $updated_at
 *
 * @property \Illuminate\Database\Eloquent\Collection|\App\Models\Team[] $teams
 * @property int|null $teams_count
 *
 * @method static \Illuminate\Database\Eloquent\Builder whereTeamName(string $name)
 * 
 * @method static \Database\Factoies\MyUserFactory<self> factory($count = null, $state = [])
 */
class MyUser extends Model
{
    use HasFactory;

    protected $table = 'users';

    protected $casts = [
        'children' => 'array',
    ];

    public function teams(): HasMany
    {
        return $this->hasMany(Team::class);
    }

    public function scopeWhereTeamName(Builder $builder, string $name)
    {
        $builder->where('name', $name);
    }

    public function getPrettyTitleAttribute(): string
    {
        return ucfirst($this->title);
    }
    
    protected static function newFactory()
    {
        return new \Database\Factoies\MyUserFactory();
    }
}

设置自定义路径

您可以使用 usePath 静态方法为生成器设置自定义基本路径。

use Illuminate\Support\ServiceProvider;
use BoktosoEnterprise\ModelDoc\Services\DocumentationGenerator;

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        DocumentationGenerator::usePath(fn () => base_path('app/Models'));
    }
}

有关更多特定用例,请参阅 配置文件

使用详细模式

如果在生成模型文档时遇到错误,您可以使用 --v 选项获取有关错误的更多信息。

php artisan model-doc:generate -v

指定要更新的模型

如果在生成模型文档时遇到错误,您可以使用 --v 选项获取有关错误的更多信息。

php artisan model-doc:generate --model={modelClass}

自定义数据库类型

如果(在详细模式下)您收到类似 Unknown database type enum requested 的错误,您可以在 Laravel 的 database.php 配置文件中添加该自定义类型映射。Laravel 使用 Doctrine DBAL 包进行数据库类型。您可以在 这里 找到支持的类型列表。Laravel 在 这里 提供了 timestamp 类型映射的示例。

以下是 database.php 配置文件中 enum 类型映射的示例

'dbal' => [
    'types' => [
        'enum' => Doctrine\DBAL\Types\StringType::class,
    ],
],

测试

SQLite

./vendor/bin/phpunit

MariaDB

需要 Lando

lando start
lando phpunit