Как указать ремесленнику сохранить модель в определенном каталоге?

Я использую Laravel 5. Я создал каталог /Models в каталоге /App, но при создании моделей с помощью Artisan он сохраняет их в каталоге App.

Я искал документацию, чтобы попытаться найти, как указать другое имя пути, но безрезультатно:

php artisan make:model TestModel

Как указать artisan сохранить модель в определенном каталоге?


person James Jeffery    schedule 29.01.2015    source источник
comment
Вы делаете модели так часто, что слишком много работы, чтобы просто переместить их туда, куда вы хотите?   -  person ceejayoz    schedule 30.01.2015
comment
Да. Всего имеется 17 моделей с различными отношениями и возможностью расширения моделей по мере реализации большего количества функций. Я не хочу, чтобы они находились в каталоге /app. Все равно это не место для них.   -  person James Jeffery    schedule 30.01.2015
comment
Я хочу сказать, не будет ли довольно тривиально переместить их самостоятельно?   -  person ceejayoz    schedule 30.01.2015
comment
О, да, конечно, это то, что я в конечном итоге сделал, но я все же хотел бы знать, существует ли решение, поскольку мой рабочий процесс намного быстрее может использовать генераторы.   -  person James Jeffery    schedule 30.01.2015


Ответы (9)


Если вы хотите указать путь при создании модели, вы можете использовать пакет генераторов Laravel. Затем вы можете указать местоположение с помощью параметра --path следующим образом:

php artisan generate:model TestModel --path=my/custom/location
person Bogdan    schedule 29.01.2015
comment
Я использую Laravel 5. Это возвращает ошибку: exception 'InvalidArgumentException' with message 'There are no commands defined in the "generate" namespace.' in /Users/me/wwwl/vendor/symfony/console/Symfony/Component/Console/Application.php:501 - person James Jeffery; 30.01.2015
comment
И это генераторы L4, а не L5. - person James Jeffery; 30.01.2015
comment
Есть версия 3 генераторов для L5. - person Bogdan; 30.01.2015
comment
Просто включите "way/generators": "~3.0" в composer.json. Инструкции находятся здесь. - person Bogdan; 30.01.2015
comment
Я думаю, что это должен быть generate:model [--path="..."] [--templatePath="..."] modelName путь перед названием модели. - person Yousef Altaf; 04.10.2016
comment
Я получаю сообщение об ошибке "--path" option does not exist. используя ларавель 5.2 - person 151291; 06.10.2016
comment
Получение той же ошибки --path не существует. - person Ketav; 21.02.2018

Создайте каталог Models или назовите его как хотите, поместите его в каталог приложения. Структура каталога должна выглядеть так

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

Затем вам просто нужно ввести команду artisan для создания моделей внутри каталога моделей.

php artisan make:model Models/ModelName 

После создания моделей ваше пространство имен внутри классов моделей будет

namespace app-name\Models\ModelName

Вы можете получить доступ к этой модели внутри вашего контроллера

use app-name\Models\ModelName
person Mansoor Akhtar    schedule 30.01.2015
comment
Для тех, кто интересуется, это работает отлично. И это даже создает подкаталог Models, если он не существует. - person Víctor López García; 13.10.2015
comment
Предупреждение: не работает в 5.2 с /App в вашем пути. Data/Models/App/Phase будут помещены в Data/Models/, но с пространством имен Data/Models/App/Phase в файле. - person Joeri; 27.03.2016
comment
Если не работает. дважды проверьте, что это обратная косая черта (/), а не вперед. - person Hitesh Chavda; 28.08.2018

В Laravel 5.4 или новее

Вы можете создать, как показано ниже

 > php artisan make:model "Models\userModel"

здесь Models — имя каталога, а userModel — имя модели.

Используйте " (двойные кавычки) или " (одинарные кавычки) для создания модели

person Jazzzzzz    schedule 02.04.2017

Для тех, кто использует Laravel >= 5.2

Можно сгенерировать модель в подкаталоге, используя встроенные генераторы Artisan, «избегая» обратной косой черты в FQN, например:

Ларавель 5.2

php artisan model:make App\\Models\\Foo

Ларавель 5.3

php artisan make:model App\\Models\\Foo

(на разницу между 5.2 и 5.3 указал @Khaled Rahman, спасибо!)

Приведенные выше команды создадут файл Foo.php в каталоге app/Models и соответствующим образом обновят пространство имен.

Надеюсь, это поможет.

person mmieluch    schedule 03.05.2016
comment
В laravel 5.3: php artisan make:model App\\Models\\Foo - person Khaled Rahman; 10.11.2016
comment
В laravel 5.4: php artisan make:model Models/Foo. Он помещает файл в каталог Models с соответствующим пространством имен. - person Sisir; 13.07.2017
comment
В Linux (Laravel 5.3): модель php artisan: make Models/Foo - person Marcelo Agimóvel; 08.10.2017

Вы можете переопределить команду Laravel по умолчанию с помощью этого класса консоли.

<?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

ваш класс будет помещен в

App\Models\Example.php

Изменить: Laravel 8 изначально поддерживает это. Я скопировал этот фрагмент откуда-то, только не помню, где указать.

person Salam    schedule 23.07.2020

Вы можете просто использовать это (для Laravel 5.3+):

php artisan make:model your_path/model_name

Если вы не укажете путь, он будет использовать основную папку «приложение» в качестве корня. Таким образом, вы можете перемещаться оттуда.

Models/Folder1/MyModel означает app->Models->Folder1->MyModel.php

person Faruk Arslan    schedule 08.11.2019

Это работает для актуальной версии Laravel, 5.6.28, в Windows 7.

php artisan make:model App\Models\NewModel

Примечание. Не используйте двойные escape-последовательности ('\\').

Это сгенерирует файл App\Models\NewModel.php следующим образом

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class NewModel extends Model
{
    //
}
person realtebo    schedule 24.07.2018

В 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 {
        ...
    }
}
person Mateusz Będziński    schedule 24.04.2021

Путь к контроллеру (API/Admin)

Путь к модели (модель/админ)

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

person kush    schedule 04.07.2018