【问题标题】:How to fix the "Base table or view not found: 1146" error when running 'php artisan migrate' command?如何修复运行 \'php artisan migrate\' 命令时的 \"Base table or view not found: 1146\" 错误?
【发布时间】:2023-01-04 05:55:31
【问题描述】:

我正在尝试朗姆酒 php artisan migrate 来生成表迁移,但我收到一个错误:

[2016-03-08 05:49:01] local.ERROR:异常'PDOException'与 消息'SQLSTATE [42S02]:找不到基表或视图:1146表 “testing.permissions”不存在于 D:\xampp\htdocs\LMS-testing\vendor\laravel\framework\src\Illuminate\Database\Connection.php:333

我试过 Base table or view not found: 1146 Table Laravel 5Doing a Laravel tutorial, getting "Base table or view not found: 1146 Table 'sdbd_todo.migrations' doesn't exist" 但没有成功。

我也试过运行 php artisan list 但得到同样的错误。

更新

**RolesPermission migration table**

Schema::create('roles', function(Blueprint $table){
            $table->increments('id');
            $table->string('name')->unique();
            $table->string('label');
            $table->string('description')->nullable();
            $table->timestamps();            
        });
        
        Schema::create('permissions', function(Blueprint $table){
            $table->increments('id');
            $table->string('name')->unique();
            $table->string('label');
            $table->string('description')->nullable();
            $table->timestamps();            
        });
        
        Schema::create('permission_role', function(Blueprint $table){
            $table->integer('permission_id')->unsigned();
            $table->integer('role_id')->unsigned();
            
            $table->foreign('permission_id')
                    ->references('id')
                    ->on('permissions')
                    ->onDelete('cascade');
            
            $table->foreign('role_id')
                    ->references('id')
                    ->on('roles')
                    ->onDelete('cascade');
            
            $table->primary(['permission_id', 'role_id']);
        });
        
        Schema::create('role_user', function(Blueprint $table){
            $table->integer('role_id')->unsigned();
            $table->integer('user_id')->unsigned();
            
            $table->foreign('role_id')
                    ->references('id')
                    ->on('roles')
                    ->onDelete('cascade');
            
            $table->foreign('user_id')
                    ->references('id')
                    ->on('users')
                    ->onDelete('cascade');
            
            $table->primary(['role_id', 'user_id']);
            
        });


.env file
APP_ENV=local
APP_DEBUG=true
APP_KEY=W8YWZe3LCngvZzexH3WLWqCDlYRSufuy

DB_HOST=127.0.0.1
DB_DATABASE=testing
DB_USERNAME=root
DB_PASSWORD=

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=log
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

【问题讨论】:

  • 你能分享一下迁移文件代码吗?
  • 已更新,请检查。
  • 即使我无法运行 php artisan make 或任何其他命令。我在创建控制器或模型时遇到同样的错误。
  • 您可以发布您的 .env 文件,尤其是与数据库连接相关的文件吗?
  • 你解决了你的问题。能分享一下你是怎么解决的吗?与同样的问题作斗争。

标签: php laravel laravel-5


【解决方案1】:

检查你的迁移文件,也许你正在使用 Schema::table,像这样:

Schema::table('table_name', function ($table)  {
    // ...
});

如果你想创建一个新表,你必须使用 Schema::create:

Schema::create('table_name', function ($table)  {
    // ...
});

Laracast More information in this link

【讨论】:

    【解决方案2】:

    我只是有同样的问题。

    我的解决方案是评论我放入AppServiceProviderboot 方法中的内容(因为在那里我有不存在的模型请求)。

    【讨论】:

    • 耶普这项工作!我在 AppServiceProvider 的启动方法上放了一些东西,我应该在 migrate:fresh --seed 之前评论它
    • 首先运行 AppServiceProvider 然后运行迁移!!!很奇怪。 [我使用 laravel 6]
    • 这个问题的解决方法:stackoverflow.com/a/41997872/6926281
    【解决方案3】:

    我把它跑到一个类似的问题。

    好像我在路由文件中执行了模型查询。所以它每次都会执行,甚至在运行实际迁移之前。

    //Problematic code
    Route::view('users', 'users', [ 'users' => User::all() ]);
    

    所以我把它改成了

    Route::get('/users', function () {
        return view('users', ['users' => User::all()]);
    });
    

    一切正常。确保在执行路径上没有执行模型查询,然后尝试迁移。

    【讨论】:

    • 我在 web.php 中有 Auth::loginUsingId 导致了错误。谢谢你的提示:)
    【解决方案4】:

    我在尝试迁移新数据库时遇到了这个问题。我在 AuthServiceProvider 中有一个函数可以选择所有权限。 我评论了那个功能,问题就解决了。

    【讨论】:

    • 这里与使用数据库的共享提供程序相同。
    【解决方案5】:

    检查您所有的服务提供商。在其中一种启动方法中,可以调用模型,尚未运行迁移到该模型。

    【讨论】:

    • 为此,到处寻找!
    【解决方案6】:

    问题是添加了外键但找不到表,因为它尚未创建。

    1)制作没有外键的表

    2) 制作一个 9999_99_99_999999_create_foreign_keys.php 文件

    3)把你想要的外键放在那里。使用 999..9 .php 文件,它确保在创建表后最后执行外键。

    4)您先添加了表,然后添加了外键。这会起作用。

    【讨论】:

      【解决方案7】:

      让我们看一下错误信息:

      SQLSTATE[42S02]: Base table or view not found: 1146 Table 'testing.permissions' doesn't exist
      

      所以表permissions 不存在。现在让我们看看迁移:

      Schema::create('permission_role', function(Blueprint $table){
              $table->integer('permission_id')->unsigned();
              $table->integer('role_id')->unsigned();
      
              $table->foreign('permission_id')
                      ->references('id')
                      ->on('permissions')
                      ->onDelete('cascade');
      
              $table->foreign('role_id')
                      ->references('id')
                      ->on('roles')
                      ->onDelete('cascade');
      
              $table->primary(['permission_id', 'role_id']);
          });
      

      我们可以在这个 Schema 调用中看到您正在为 permissions 表定义一个外键。

      有了这个,我们可以假设 Laravel 正在尝试创建这个外键,但是它想要引用的表不存在。

      当迁移文件的顺序与必须创建表的顺序不同时,通常会发生这种情况。因此,如果我的migrations 文件夹中有此顺序的迁移文件:

      2016_10_09_134416_create_permission_role_table 
      2016_10_09_134416_create_permissions_table 
      

      他们将按该顺序执行。但是,如果我知道 permission_role 依赖于 permissions,我需要通过更改文件名中的时间戳来更改它们的位置:

      2016_10_09_134415_create_permissions_table 
      2016_10_09_134416_create_permission_role_table 
      

      在这种情况下,我只更改了create_permissions_table 的最后一位数字,因此它将小于create_permissions_role_table 的时间戳。在此之后,不要忘记运行:

      composer dump-autoload
      

      所以 composer 可以知道你的改变。

      【讨论】:

        【解决方案8】:

        它对我有用,请在此处查看更多信息:

        https://stackoverflow.com/a/49300262/5129122

            try {
        
                return Permission::with('role')->get();
        
            } catch (Exception $e) {
        
                return [];
        
            }
        

        【讨论】:

          【解决方案9】:

          我曾经遇到过同样的问题,我想问题不在你的迁移中,但看起来在你在数据库中创建权限表之前检查了权限。确保你没有在你的路线中添加authmiddleware。或注释掉任何使用来自config/app.php 的权限表的服务提供商。很可能从路线中删除 auth middleware 直到生成迁移将解决您的问题

          【讨论】:

          • 除了 collactive Html 之外,我没有使用默认提供程序。我还从路线中删除了所有代码。仍然遇到同样的错误。
          • 那么在我的情况下,这很有效。我不明白为什么它对迁移有任何影响......迁移引导 laravel 并检查代码吗?
          【解决方案10】:

          万一其他人遇到这个问题,我只是遇到了同样的问题,它发生的原因是因为我创建了几个命令,然后需要回滚我的数据库以重新运行迁移。

          要修复它,我必须注释掉

          protected $commands = []
          

          在 appConsoleKernel.php 文件中。

          呸!!!! :-)

          【讨论】:

            【解决方案11】:

            唯一对我有用的解决方案是在迁移之前在 config/app.php 中禁用 PermissionsServiceProvider。

            【讨论】:

              【解决方案12】:

              对于那些因为“迁移”表没有自动创建而最终来到这里的人。在某些情况下,您需要运行以下 artisan 命令:

              php artisan migrate:install
              

              或代码:

              Artisan::call('migrate:install', [
                  '--database' => 'your_database_connection', // optional
              ]);
              

              获取您的基本“迁移”表,不确定为什么它没有自动生成但它确实发生了。

              【讨论】:

                【解决方案13】:

                请在 AppServiceProvider 上检查您的启动方法。如果您在那里使用任何模型请求,请对其进行评论并再次迁移。您的问题将得到解决

                【讨论】:

                  猜你喜欢
                  • 2021-01-29
                  • 2016-06-21
                  • 2021-08-19
                  • 1970-01-01
                  • 2017-05-31
                  • 2016-09-07
                  • 2017-09-27
                  • 2019-10-29
                  • 2020-01-05
                  相关资源
                  最近更新 更多