如何在php artisan make:model命令中使用Jenssegers \ Mongodb \ Eloquent \ Model代替Illuminate \ Database \ Eloquent \ Model

时间:2018-11-09 09:01:35

标签: php mongodb laravel eloquent

我正在使用Laravel和MongoDB(jenssegers / laravel-mongodb)开发一个Webapp。

在使用php artisan make:model创建新模型时,该命令在文件中使用Illuminate\Database\Eloquent\Model声明,并且每次我需要用Illuminate\Database\Eloquent\Model手动替换Jenssegers\Mongodb\Eloquent\Model时。

有没有办法使流程自动化?

2 个答案:

答案 0 :(得分:1)

软件包似乎没有提供Artisan命令来创建MongoDB模型存根,这似乎有点疏忽。但是,如果需要,可以为Artisan自己创建这种生成器命令并不是很难。

模型制作命令位于https://github.com/laravel/framework/blob/5.7/src/Illuminate/Foundation/Console/ModelMakeCommand.php,用于创建该模型的存根文件位于https://github.com/laravel/framework/blob/5.7/src/Illuminate/Foundation/Console/stubs/model.stub。如果扩展命令类以将MongoDB版本替换存根文件,并将存根文件修改为MongoDB模型,则应该能够创建用于生成MongoDB模型的命令。甚至值得分叉该软件包以添加此内容,然后提交拉取请求以将其添加到该软件包中。我会参考Laravel文档中涉及Artisan的部分以获取更多详细信息,因为它详细描述了添加自己的Artisan命令的过程。

答案 1 :(得分:1)

另一种方法是编写自己的类生成器,然后覆盖命令make:model

在文件routes/console.php中添加以下内容以覆盖命令

use Path\To\Class\MyCustomClassGenerator;

Artisan::command('make:model', function(){
  new MyCustomClassGenerator();
  $this->comment('new MongoDB Model generated');
});