0

Как удалить модель с помощью php artisan?

27

Вопрос: Есть ли команда для безопасного удаления модели в Laravel 5?

Для создания модели мы используем команду:

php artisan make:model modelname

Эта команда создает модель в папке app, а также миграцию в database/migrations.

Однако я не могу найти, как удалить модель... Как правильно это сделать?

5 ответ(ов)

0

Удаление модели: просто удалите модель из папки App/ или другой, где она находится.

Удаление миграции: если вы уже применили миграцию (то есть база данных была изменена), у вас есть два варианта:

"Грязный" способ для начинающих: выполните команду migrate:rollback, пока миграция не будет отменена (если это была последняя миграция, одного отката будет достаточно, если нет — придется откатить несколько раз), затем удалите файл миграции (он находится в папке database/migrations). Важно: класс миграции все еще будет загружаться через автозагрузчик Composer. Вам нужно удалить загрузку класса миграции из файла vendor/composer/autoload_classmap.php. Возможно, команда composer dumpautoload сработает, но у меня это не сработало. Если в базе данных нет важных данных и вы можете ее очистить, просто удалите файл миграции, выполните composer dumpautoload, а затем запустите php artisan migrate:refresh. Это откатит все миграции и применит их снова.

"Если это продакшн и я накосячил": создайте другую миграцию, где метод up будет удалять таблицу первой миграции, а метод down будет создавать ее снова (по сути, это метод up из первой миграции). Оставьте оба файла миграции, не удаляйте их.

Если вы еще не применили миграцию, просто удалите файл миграции, выполните composer dumpautoload, и если вы получите ошибку class/file not found, проверьте, есть ли класс удаленного файла в vendor/composer/autoload_classmap.php, и удалите соответствующую строку.

0

Не используйте команду, просто сделайте это вручную, и это будет безопасно.

  1. Сначала удалите модель, если она больше не нужна.
  2. Удалите миграцию из папки ...database/migrations.
  3. Если вы уже выполняли миграции (т.е. запускали php artisan migrate), зайдите в phpMyAdmin или SQL (в зависимости от ситуации) и удалите таблицу, созданную с помощью миграции, из вашей базы данных.
  4. Все еще находясь в вашей базе данных, в таблице миграций найдите строку с именем файла миграции и удалите эту строку.

Работает для меня, надеюсь, это поможет!

0

Вы можете использовать следующий код для удаления контроллеров и моделей в вашем проекте Laravel. Я создал две консольные команды RemoveController и RemoveModel, которые помогут вам в этой задаче.

app/Console/Commands/RemoveController.php

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class RemoveController extends Command
{
    /**
     * Название и подпись консольной команды.
     *
     * @var string
     */
    protected $signature = 'remove:controller {name}';

    /**
     * Описание консольной команды.
     *
     * @var string
     */
    protected $description = 'Удалить класс контроллера';

    /**
     * Создание нового экземпляра команды.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Выполнение консольной команды.
     *
     * @return mixed
     */
    public function handle(): void
    {
        $controllerName = $this->argument('name') . '.php';
        $controllerPath = base_path('app/Http/Controllers/') . $controllerName;
        if (file_exists($controllerPath)) {
            unlink($controllerPath);
            $this->line('Контроллер успешно удален.');
        } else {
            $this->line('Контроллер не найден.');
        }
    }
}

app/Console/Commands/RemoveModel.php

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class RemoveModel extends Command
{
    /**
     * Название и подпись консольной команды.
     *
     * @var string
     */
    protected $signature = 'remove:model {name}';

    /**
     * Описание консольной команды.
     *
     * @var string
     */
    protected $description = 'Удалить класс модели';

    /**
     * Создание нового экземпляра команды.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Выполнение консольной команды.
     *
     * @return mixed
     */
    public function handle(): void
    {
        $modelName = $this->argument('name') . '.php';
        $modelPath = base_path('app/') . $modelName;
        if (file_exists($modelPath)) {
            unlink($modelPath);
            $this->line('Модель успешно удалена.');
        } else {
            $this->line('Модель не найдена.');
        }
    }
}

Надеюсь, это поможет кому-то!

0

Чтобы найти и удалить путь к модели в файле vendor/composer/autoload_classmap.php, выполните следующие шаги:

  1. Откройте файл vendor/composer/autoload_classmap.php в текстовом редакторе. Вы можете использовать сочетание клавиш Ctrl + F, чтобы быстро открыть окно поиска.

  2. Вставьте имя модели (modelname) в строку поиска. Это позволит вам быстро найти соответствующий путь к файлу модели.

  3. Найдя нужную строку, удостоверьтесь, что вы хотите её удалить. Не забудьте создать резервную копию файла перед внесением изменений на случай, если вам понадобится восстановить исходные данные.

  4. Удалите строку, соответствующую пути к вашей модели. Это можно сделать, выделив её и нажав Delete.

  5. Учтите, что изменения в папке vendor могут быть перезаписаны при следующем обновлении зависимостей с помощью Composer. Поэтому рекомендуется проверить, почему вы хотите удалить этот путь, и возможно, лучше исправить проблему в самом проекте.

  6. После завершения редактирования сохраните файл и закройте текстовый редактор.

Помните, что редактирование файлов в директории vendor может привести к непредсказуемым последствиям, особенно при обновлениях зависимостей!

0

Проблема может возникнуть, если имя вашей базы данных отличается от того, что указано в файле .env.

DB_DATABASE=laravel

По умолчанию в файле .env имя базы данных установлено как laravel. Вы можете заменить laravel на имя вашей базы данных. Убедитесь, что имя базы данных в .env соответствует тому, что у вас создано в системе управления базами данных.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь