我正在尝试rum php artisan migrate
来生成表迁移,但我遇到了一个错误:
〔2016-03-08 05:49:01〕当地。错误:异常"PDOException"带有消息'SQLSTATE[42S02]:找不到基表或视图:1146表中不存在"testing.permissions"D: \examplep\htdocs\LMS testing\vendor\laravel\framework\src\Illuminate\Database\Connection.php:333
我尝试过没有找到的基本表或视图:1146表Laravel 5和做一个Laravel教程,得到";找不到基表或视图:1146表';sdbd_todo.migrations';不会';t存在";但没有成功。
我也尝试过运行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
检查迁移文件,可能您使用的是Schema::table,如下所示:
Schema::table('table_name', function ($table) {
// ...
});
如果你想创建一个新表,你必须使用Schema::create:
Schema::create('table_name', function ($table) {
// ...
});
Laracast更多信息请点击此链接。
我刚刚遇到了同样的问题。
我的解决方案是评论我在AppServiceProvider
的boot
方法中输入的内容(因为在那里我有不存在的Model请求(。
我运行它来解决类似的问题。
看起来我在routes文件中执行了一个Model查询。因此,它每次都会执行,甚至在运行实际迁移之前。
//Problematic code
Route::view('users', 'users', [ 'users' => User::all() ]);
所以我把它改成
Route::get('/users', function () {
return view('users', ['users' => User::all()]);
});
一切都很好。请确保执行路径上没有超出任何Model查询,然后尝试迁移。
我在尝试迁移新数据库时遇到了这个问题。我在AuthServiceProvider中有一个功能,它可以选择所有权限。我评论了那个函数,问题就解决了。
检查您的所有服务提供商。在其中一种引导方法中,可能会调用一个模型,该模型的迁移尚未运行。
问题是添加了外键,但找不到表,因为它还没有创建。
1( 制作没有外键的表
2( 制作9999_99_99_999999_create_foregard_keys.php文件
3( 把你想要的外国钥匙放在那里。对于999..9.php文件,它确保在生成表之后最后执行外键。
4( 您先添加了表,然后添加了外键。这会奏效的。
让我们看看错误消息:
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
所以作曲家可以意识到你的变化。
它对我有效,请参阅此处的更多信息:
https://stackoverflow.com/a/49300262/5129122
try {
return Permission::with('role')->get();
} catch (Exception $e) {
return [];
}
我曾经遇到过同样的问题,我想问题不在迁移中,而是在DB中创建权限表之前检查权限。请确保您的路线中没有添加auth
middleware
。或者注释掉使用来自CCD_ 15的权限表的任何服务提供商。最有可能的是,在生成迁移之前,从路由中删除auth
middleware
将解决您的问题
如果其他人也遇到了同样的问题,我只是遇到了相同的问题,发生这种情况的原因是我创建了几个命令,然后需要回滚数据库来重新运行迁移。
为了修复它,我不得不注释掉的内容
protected $commands = []
app\Console\Cernel.php文件中。
呜呜!!!:-(
唯一对我有效的解决方案是在迁移之前在config/app.php中禁用PermissionsServiceProvider。
对于那些因为"迁移"而最终来到这里的人,表不是自动创建的。在某些情况下,您需要运行以下artisan命令:
php artisan migrate:install
OR带代码:
Artisan::call('migrate:install', [
'--database' => 'your_database_connection', // optional
]);
要获得基本的"迁移"表,不确定为什么它不是自动生成的,但它确实发生了。
请在AppServiceProvider上检查您的启动方法。如果您在那里使用任何模型请求,请对它们进行注释并再次迁移。您的问题将得到解决