【问题标题】:How to delete a model using php artisan?如何使用 php artisan 删除模型?
【发布时间】:2015-08-11 14:00:08
【问题描述】:

在 Laravel 5 中有安全删除模型的命令吗?要创建我们使用的模型

php artisan make:model modelname

这将在app 文件夹下创建一个模型,并在database/migrations 中进行迁移

但我找不到如何删除模型...

【问题讨论】:

  • 您必须手动删除模型。
  • 所以我只需要删除app文件夹下的模型文件和迁移@RobinR?
  • 是的,如果您想删除迁移文件。否则,如果您想回滚迁移,则需要执行回滚。
  • 嗯好的,有一个命令会很有用...谢谢@RobinR,另一个问题,如果我想添加或删除表的列,我是否创建了一个新迁移?
  • 嗯,问题是我想删除在其他三个模型之前创建的模型。我可以指定回滚@RobinR 的模型吗?

标签: php model laravel-5


【解决方案1】:

删除模型:只需删除 App/ 或其他文件夹下的模型即可。

删除迁移:如果您已迁移它(意味着数据库已发生更改),您有两种选择:

“项目开始”/丑陋的方式是 migrate:rollback 直到迁移被撤消(如果这是您进行的最后一次迁移,则回滚一次就足够了,如果没有,您将不得不回滚几次) 然后删除迁移文件(database/migrations 文件夹内的那个。重要的是:迁移的类仍将由作曲家自动加载。所以你必须从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 是否具有您刚刚删除的文件的类并删除那里的行。

【讨论】:

  • 谢谢,在我的情况下,该应用程序仍在开发中。所以步骤与生产中的步骤相同,还是我只是删除它们?
  • 如果您处于早期开发阶段,这意味着您的数据库可能仍会更改,请回滚直到撤消迁移,删除迁移文件 dumpautoload,然后再次迁移。我还建议您设置一些播种机以使测试更容易然后php artisan migrate:refresh --seed。我将刷新解决方案添加到答案中。
  • 删除App/model类,删除迁移文件并手动从autoload_classmap.php中删除条目,这些步骤是否有效?还是我应该不惜一切代价使用composer dumpautoload
【解决方案2】:

无需命令,手动操作即可,安全无忧

  1. 先删除模型(如果不需要)不再需要模型
  2. ...database/migrations 文件夹中删除迁移
  3. 如果您已经迁移,即如果您已经运行 php artisan migrate,请登录到您的 phpmyadmin 或 SQL(无论哪种情况)并在您的数据库中,删除迁移创建的表
  4. 仍在您的数据库中,在迁移表中,找到具有该迁移文件名的行并删除该行。

对我有用,希望对你有帮助!

【讨论】:

    【解决方案3】:

    在 vendor/composer/autoload_classmap.php 中搜索 Ctrl+F 写入型号名称 删除允许编辑此文件夹并删除模型路径

    【讨论】:

      【解决方案4】:

      当您的数据库名称与.env 文件中定义的名称不同时,也会出现此问题。

      DB_DATABASE=laravel
      

      默认情况下,.env 中的数据库结构将数据库名称设置为 laravel。您可以将laravel 替换为您的数据库名称。

      【讨论】:

        【解决方案5】:

        这是我为我的项目创建的删除控制器和模型的内容

        app/Console/Commands/RemoveController.php

        <?php
        
        namespace App\Console\Commands;
        
        use Illuminate\Console\Command;
        
        class RemoveController extends Command
        {
            /**
             * The name and signature of the console command.
             *
             * @var string
             */
            protected $signature = 'remove:controller {name}';
        
            /**
             * The console command description.
             *
             * @var string
             */
            protected $description = 'Remove the controller class';
        
            /**
             * Create a new command instance.
             *
             * @return void
             */
            public function __construct()
            {
                parent::__construct();
            }
        
            /**
             * Execute the console command.
             *
             * @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('Controller removed successfully.');
                }else{
                    $this->line('No controller found.');
                }
            }
        }
        

        app/Console/Commands/RemoveModel.php

        <?php
        
        namespace App\Console\Commands;
        
        use Illuminate\Console\Command;
        
        class RemoveModel extends Command
        {
            /**
             * The name and signature of the console command.
             *
             * @var string
             */
            protected $signature = 'remove:model {name}';
        
            /**
             * The console command description.
             *
             * @var string
             */
            protected $description = 'Remove the model class';
        
            /**
             * Create a new command instance.
             *
             * @return void
             */
            public function __construct()
            {
                parent::__construct();
            }
        
            /**
             * Execute the console command.
             *
             * @return mixed
             */
            public function handle():void
            {
                $modelName = $this->argument('name').'.php';
                $modelPath = base_path('app/').$modelName;
                if(file_exists($modelPath)){
                    unlink($modelPath);
                    $this->line('Model removed successfully.');
                }else{
                    $this->line('No controller found.');
                }
            }
        }
        

        我希望这对某人有帮助

        【讨论】:

          【解决方案6】:

          没有任何工匠命令可以做到。你想手动做。

          1. 您想从 Models 目录中删除您的模型
            路径:app\Models\yourmodel.php

          2. 在下一步中,您要从迁移文件夹中删除迁移文件
            路径:database\migrations\yourmigrationfile.php

          注意:如果你已经迁移了,你应该想从你的数据库中删除表。你可以登录到你的 phpmyadmin 面板,你可以这样做。

          【讨论】:

            【解决方案7】:

            如果您看到此错误(模型已存在!),您可以删除 App 文件夹中的模型

            【讨论】:

            • 点评来源: 嗨,这篇文章似乎没有为问题提供answer;它更适合作为评论。
            猜你喜欢
            • 2016-01-20
            • 2015-08-21
            • 2022-01-15
            • 2018-09-17
            • 2019-06-30
            • 2015-02-17
            • 1970-01-01
            • 1970-01-01
            • 2020-06-28
            相关资源
            最近更新 更多