我遇到了大问题。我试图朗读php artisan migrate
来生成表格迁移,但我得到了
[2016-03-08 05:49:01] local.ERROR: exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'testing.permissions' doesn't exist' in D:\xampp\htdocs\LMS-testing\vendor\laravel\framework\src\Illuminate\Database\Connection.php:333
错误。我曾尝试在互联网上搜索,我误解了,但我没有得到任何解决方案。
我也尝试了Base table or view not found: 1146 Table Laravel 5和Doing 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
答案 0 :(得分:5)
检查您的迁移文件,也许您正在使用Schema :: table,如下所示:
Schema::table('table_name', function ($table) {
// ...
});
如果要创建新表,则必须使用Schema :: create:
Schema::create('table_name', function ($table) {
// ...
});
Laracast More information in this link。
答案 1 :(得分:2)
问题是添加了外键但找不到表,因为它还没有创建。
1)制作没有外键的表
2)制作一个9999_99_99_999999_create_foreign_keys.php文件
3)把你想要的外键放在那里。使用999..9 .php文件,它确保在表格完成后它会持续使用外键。
4)您先添加了表,然后添加了外键。这将有效。
答案 2 :(得分:1)
让我们看一下错误信息:
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
因此作曲家可以意识到你的变化。
答案 3 :(得分:1)
我尝试迁移新数据库时遇到此问题。我在AuthServiceProvider中有一个选择所有权限的函数。 我评论说功能和问题是固定的。
答案 4 :(得分:1)
它对我有用,请在此处查看更多信息
https://stackoverflow.com/a/49300262/5129122
try {
return Permission::with('role')->get();
} catch (\Exception $e) {
return [];
}
答案 5 :(得分:1)
我遇到了类似的问题。
好像我在routes文件中执行了Model查询。因此,它每次都会执行,甚至在运行实际迁移之前也是如此。
//Problematic code
Route::view('users', 'users', [ 'users' => User::all() ]);
所以我将其更改为
Route::get('/users', function () {
return view('users', ['users' => User::all()]);
});
一切正常。确保没有在执行路径上执行任何Model查询,然后尝试迁移。
答案 6 :(得分:0)
我曾遇到过同样的问题,我想问题不在您的迁移中,但在DB中创建权限表之前会查看权限。确保您的路线中没有添加auth
middleware
。或注释掉使用config/app.php
权限表的任何服务提供商。最有可能从路由中删除auth
middleware
,直到您生成迁移将解决您的问题
答案 7 :(得分:0)
如果有其他人遇到这个问题,我就遇到了同样的问题,原因是因为我创建了几个命令,然后需要回滚我的数据库以重新运行迁移。
要修复它,我必须注释掉
的内容protected $commands = []
在app \ Console \ Kernel.php文件中。
呼!!!! : - )
答案 8 :(得分:0)
唯一适用于我的解决方案是在迁移之前在config / app.php中禁用PermissionsServiceProvider。
答案 9 :(得分:0)
我只是遇到了同样的问题。
我的解决方案是评论我在boot
的{{1}}方法中输入的内容(因为在那里我有Model请求,而该请求不再存在了)。
答案 10 :(得分:0)
对于那些由于“迁移”表而最终在这里的人不会自动创建。在某些情况下,您需要运行以下artisan命令:
php artisan migrate:install
OR或代码:
Artisan::call('migrate:install', [
'--database' => 'your_database_connection', // optional
]);
要获取基本的“迁移”表,请不确定为什么它不会自动生成但确实发生了。
答案 11 :(得分:0)
检查所有服务提供商。在一种引导方法中,可以调用一个模型,该模型尚未运行。