如何指示 artisan 将模型保存到特定目录?

How do I instruct artisan to save model to specific directory?

我正在使用 Laravel 5。我在 /App 目录下创建了一个 /Models 目录,但是当使用 Artisan 生成模型时,它会将它们存储在 App 目录下。

我搜索了文档,试图找到如何指定不同的路径名,但无济于事:

php artisan make:model TestModel

如何指示 artisan 将模型保存到特定目录?

如果要在生成模型时指定路径,可以使用Laravel Generators Package。然后,您可以使用 --path 选项指定位置,如下所示:

php artisan generate:model TestModel --path=my/custom/location

创建一个 Models 目录或任何你想命名的目录,将它放在 app 目录中。目录结构应该类似于

laravel-project
     /app
        /Console
        /Events
        /Exceptions
        /Http
        /Jobs
        /Listeners
        /Provider
       /Models

然后你只需要输入 artisan 命令在 Models 目录中创建模型

php artisan make:model Models/ModelName 

创建模型后,模型 类 内的命名空间将是

namespace app-name\Models\ModelName

您可以在您的控制器中访问此模型

use app-name\Models\ModelName

对于那些使用 Laravel >= 5.2

可以通过 "escaping" FQN 中的反斜杠使用内置的 Artisan 生成器在子目录中生成模型,如下所示:

Laravel 5.2

php artisan model:make App\Models\Foo

Laravel 5.3

php artisan make:model App\Models\Foo

@Khaled Rahman指出了5.2和5.3的区别,谢谢!)

上面的命令将在 app/Models 目录中创建 Foo.php 文件并相应地更新命名空间。

希望对您有所帮助。

在Laravel 5.4或以后

您可以创建如下

 > php artisan make:model "Models\userModel"

这里Models是目录名,userModel是模型名

Use " (double quotes) or ' (single quotes) to create model

控制器路径(ApI/Admin)

模型路径(Model/Admin)

php artisan make:controller API/Admin/PlanController --model=Model/Admin/Plan --resource

这适用于实际 Laravel 版本 5.6.28,在 Windows 7

php artisan make:model App\Models\NewModel

Note: Do not use double escapes ('\')

生成文件App\Models\NewModel.php如下

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class NewModel extends Model
{
    //
}

你可以简单地使用这个(对于 Laravel 5.3+):

php artisan make:model your_path/model_name

如果您不指定路径,它将使用 'app' 主文件夹作为根目录。所以你可以从那里导航。

Models/Folder1/MyModel 表示 app->Models->Folder1->MyModel.php

您可以使用此控制台覆盖默认的 Laravel 命令 class

<?php

namespace App\Console\Commands;

use Illuminate\Foundation\Console\ModelMakeCommand;

class ModelMake extends ModelMakeCommand
{
    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace.'\Models';
    }
}

下次做模型的时候

php artisan make:model Example

你的class将被放在

App\Models\Example.php

编辑:Laravel 8 原生支持此功能。我从某处复制了这段代码,只是记不起来源。

Laravel 8+中使用默认的模型目录,可以像下面这样实现。

php artisan make:model App\Modules\ModuleName\Models\ModelName

在目录

下生成模型文件

app/Modules/ModuleName/Models/ModelName.php

<?php
    namespace App\Modules\ModuleName\Models;
    use Illuminate\Database\Eloquent\Model;
    class ModelName extends Model {
        ...
    }
}

如果未定义,请在 composer.json 文件中添加此行。

"autoload": {
        "psr-4": {
            "App\": "app/",
            //...
        }

然后在你的终端做; php artisan make:model Models/your_path/model_name