colorgreen/laravel-model-generator

本包的最新版本(v1.2.10)没有提供许可证信息。

生成模型

v1.2.10 2019-12-11 00:57 UTC

README

这是一个基于laracademy/generators的简单生成器,扩展了模型生成功能。生成的模型类似于Yii框架中的模型。基于现有表创建或更新模型。

创建BaseModel和Model。如果表结构有变化,通过相同的命令重新生成模型(与首次生成相同)过程将仅影响BaseModel(新的规则、字段等),因此请在Model类中编写您的逻辑以防止覆盖。

还会为模型生成基础关系(关系 hasOne()belongsTo() )。

parent_id 会生成到自身的关联,可以通过 parent() 获取

Base扩展了Colorgreen\Generator\Models\BaseModel,提供模型验证。

$model = new Model();
$model->email = "xxx";

if( !$model->save() )
    print_r( $model->getErrors() );

// if validation will fail, e.g. output:
// {"id":["The id field is required."],"email":["The email must be a valid email address."]}

或在API控制器中使用模型验证,例如store动作

public function store(Request $request)
{
    $model = new Model();
    $model->fill($request->all());
    $model->getValidator()->validate();

    $model->save();

    return response()->json( [ 'message' => __('Success'), 'redirect' => route('model.edit', [$model] ) ] );
}

示例 'BaseModel'

<?php

namespace App\Models\Base;

use Colorgreen\Generator\Models\BaseModel;

/**
 * Class BasePage
 * @property int id
 * @property string image
 * @property boolean active
 * @property int count
 * @property string email
 
 * @property int related_model_id
 * @property \App\Models\RelatedModel related_model
 */
class BasePage extends BaseModel
{
    protected $attributes = [
		'email' => 'default_email', 
		'active' => 1, 
		'count' => 0
	];

    protected static $rules = [
		'id' => 'required|numeric|integer', 
		'image' => 'nullable|string|max:255', 
		'active' => 'nullable|boolean', 
		'count' => 'nullable|numeric|integer', 
		'email' => 'required|string|max:100|email'
	];
	
	// samlple hasMany relation: check if relation shouldn't be OneToOne ( hasOne() )
	public function pages() {
    		return $this->hasMany('SmallElectron\Cms\Models\Page', 'redirect_type_id' );
    	}
    	
	public function related_model() {
		return $this->belongsTo( App\Models\RelatedModel::class, 'related_model_id' );
	}

    protected $table = 'pages';

    protected $fillable = ['image', 'active', 'count', 'email'];

    protected $hidden = [];

    protected $casts = [ 'active' => 'boolean', 'count' => 'integer', 'related_model_id' => 'integer' ];

    protected $dates = ['created_at', 'updated_at'];
    
    // set in to 'false' if model shouldn't be validated during save.
    // you can turn off validation on specific model using $model->setValidation(false)
    protected $validation = true;
}

安装

composer require colorgreen/laravel-model-generator

使用

cgenerator:modelfromtable

此命令将读取您的数据库表并根据该表结构生成模型。自动填充字段、casts、dates以及命名空间。

您可以使用此命令一次性生成单个表、多个表或所有表。

  • --name=
    • 用于自定义模型名称。默认为studle_case格式的表名,并且是单数。例如,当表名为'pages'且您想将模型命名为MyPage时,请使用--name=Page。
    • 如果您使用此命令,请也在--table中提供一个表。
  • --table=
    • 如果填写此参数,将为给定的表生成模型。
    • 您也可以通过逗号分隔值传递一个表列表。
  • --base=
    • 如果您想使用自定义BaseModel,请使用此选项。例如,--base=\App\Models\MyBaseModel。
  • --prefix=
    • 设置表的名称前缀。例如,表 'cms_user_permissions' 将生成模型 'UserPermission'。
    • 注意,使用--prefix选项与--all选项一起使用时,只会为以指定前缀开始的表生成模型。
  • --all
    • 如果此标志存在,则将忽略表命令。
    • 这将为您数据库中找到的所有表生成模型。
    • 如果设置了--prefix,则关系将仅在前缀表之间建立
  • --connection=
    • 默认情况下,如果省略此选项,则生成器将使用在config/database.php中找到的默认连接。
    • 要指定一个连接,请确保它在您的config/database.php中首先存在。
  • --folder=
    • 默认情况下,所有模型都存储在您的app/目录中。如果您希望将它们存储在其他位置,您可以提供从您的基Laravel应用程序的相对路径。
    • 请参阅示例以获取更多信息
  • --namespace=
    • 默认情况下,所有模型都将具有App命名空间
    • 您可以通过添加此选项来更改命名空间
  • --debug
    • 在运行时显示更多信息

示例

生成单个表

php artisan cgenerator:modelfromtable --table=users

将生成名为User的模型

生成具有自定义模型名称的单个表

php artisan cgenerator:modelfromtable --model_name=MyUser --table=users

生成多个表

php artisan cgenerator:modelfromtable --table=users,posts

生成所有表

php artisan cgenerator:modelfromtable --all

从具有前缀的表中生成模型

php artisan cgenerator:modelfromtable --all --prefix=foo_

对于表:blog_posts, blog_comments, shop_products, users,命令 php artisan generate:modelfromtable --all --prefix=blog_ 将仅生成blog_posts和blog_comments的模型,模型 PostComment

更改到在database.php中找到的另一个连接并生成所有表的模型

php artisan cgenerator:modelfromtable --connection=spark --all

更改到/app/Models的文件夹

php artisan cgenerator:modelfromtable --table=user --folder=app\Models

致谢

基于Laracadeny Generators

许可证

免费使用