xiaobai/mph

这是一个基于thinkphp的command类实现的,用于自动给model增加或更新属性注释的工具。

v1.0.2 2020-09-11 12:11 UTC

This package is auto-updated.

Last update: 2024-09-11 20:42:12 UTC


README

这是一个基于thinkphp的command类实现的,用于自动给model增加或更新属性注释的工具,因为tp里面一个模型对应的是一个数据表。php是动态的语言,模型对外提供的属性不能在代码中定义,这会导致以$model->property形式访问时编辑器会发出警告,且没有代码提示,非常不友好。此外,如果想了解具体的含义,需要查看数据表或查找模型类中的具体方法,这也很麻烦。因此,可以通过在模型类顶部添加注释的方式解决这个问题,但每次都手动注释无疑会增加维护成本,这个工具就是为了解决这个问题而设计的。

实现功能

  • 可以自动为单个文件或目录下的所有模型文件生成注释。
  • 自动生成的属性注释包含数据表字段、模型定义的获取器、模型定义的关联方法。
  • 当相关属性发生变化时,可以重复执行以更新。
  • 根据数据表备注模型的作用

使用方法

首先使用composer安装

composer require  xiaobai/mph 

然后在command.php文件中添加配置

'amp' => \xiaobai\think\command\ModelProperty::class,

完成配置后

php think amp index/model #为index模块下model目录的所有的模型文件生成注释

也可以

php think amp index/model/PeopleModel.php #为index模块下model目录的PeopleModel生成注释

以下是一个实验案例

原始模型文件内容

class PeopleModel extends Model
{
    protected $table = 'new_people';

    /**
     * 人物的工作经历数据
     * @return \think\model\relation\HasMany
     */
    public function careerData()
    {
        return $this->hasMany(CareerModel::class,'people_guid','guid');
    }

    /**
     * 个人的详细信息
     * @return \think\model\relation\HasOne
     */
    public function profileData()
    {
        return $this->hasOne(ProfileModel::class,'people_guid','guid');
    }

    /**
     * 头像的完整路径
     * @param $value
     * @param $data
     * @return mixed
     */
    public function getLogoFullPathAttr($value,$data)
    {
        return resource_url($data['urk']);
    }

}

效果如下

use think\Model;

/**
 * 人物表(投资者/创业者)
 * @property $guid   人物的guid
 * @property $publish_status   发布状态
 * @property $full_name   用户名称
 * @property $english_name   中文名称
 * @property $gender   性别
 * @property $byline   个性签名
 * @property $avatar_image   头像
 * @property $date_of_birth   出生日期
 * @property $contact_wechat   微信
 * @property $is_entrepreneur   是否是创业
 * @property $claimed_by   认领人
 * @property $claimed_at   认领时间
 * @property $career_data   CareerModel[]   人物的工作经历数据
 * @property $profile_data   ProfileModel   个人的详细信息
 * @property $logo_full_path   头像的完整路径
 */

class PeopleModel extends Model
{