php - Laravel 错误 : SQLSTATE[42S02]: Base table or view not found

标签 php laravel

完整错误:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'quotesapp.admin' doesn't exist (SQL: select count(*) as aggregate from `admin` where `username` = Admin)

我知道错误是错误日志中出现的名称与其他地方定义的名称不匹配(在数据库文件夹中,但我无法解决问题。我四处搜索并找到了 this 帖子,但即使在我实现了解决方案(如下所示)之后,我仍然遇到同样的错误。

我正在使用 Laravel 5.2。我的数据库目录中有一个 admins 表,如下所示:

class CreateAdminsTable extends Migration
{

    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
            $table->string('username')->unique();
            $table->string('password');
            $table->rememberToken();
        });
    }

    public function down()
    {
        Schema::drop('admins');
    }
}

Admin 模型如下所示:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Authenticatable; 

class Admin extends Model implements \Illuminate\Contracts\Auth\Authenticatable
{
    protected $table = 'admins';
    use Authenticatable;
}

?>

这是导致抛出错误的相关路由:

Route::post('/admin/register', [
    'uses' => 'AdminController@postRegister',
    'as' => 'register'
]);

这里是postRegister方法

 public function postRegister(Request $request) {

    $this->validate($request, [
        'username' => 'required|unique:admin|max:30|min:3',
        'password' => 'required|min:5',
        'password_confirm' => 'required'           
    ]);

    $password = $request['password'];
    $passwordConfirm = $request['password_confirm'];

    if ($password !== $passwordConfirm) {
        return redirect()->back()->with(['fail' => 'password fields do not match!']);
    }

    $admin = new Admin();
    $admin->username = $request['username'];
    $admin->password = $request['password'];
    $admin->save();

    return redirect()->route('index');       

}

我已经在 composer 中运行了 php artisan migrate,但是我得到了“nothing to migrate”的响应。我尝试通过 Composer 刷新数据库,但无济于事。表 'admins' 出现在 phpmyadmin 中。

更新 1: 添加了完整的错误消息

最佳答案

错误来自验证部分:

  $this->validate($request, [
    'username' => 'required|unique:admin|max:30|min:3',
    'password' => 'required|min:5',
    'password_confirm' => 'required'           
]);

当检查用户名 的唯一性时,您指的是数据库中的admin 表,但是该表名为admins(末尾有 s)。 因此 Laravel 正在寻找一个名为 admin 的表,它当然不存在。在末尾添加 s,它应该可以工作。

关于php - Laravel 错误 : SQLSTATE[42S02]: Base table or view not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35851563/

相关文章:

php - 当我在 url 末尾添加斜杠 (/) 时,CSS 不起作用

php - 添加行时 MySQL 中的自动日期列

php - 没有订阅的 Laravel 收银台

php - 与 Laravel 的数据库关系

php - 插入数据库后获取所有 url GET 值和一些随机值

php - Laravel 5 Entrust - 用户属于许多应用程序

php - 如何获取 woocommerce 品牌缩略图属性?

Laravel 5 Elixir 脚本成分不起作用(不输出文件)

php - Laravel View 路由的两个问题

php - 如何在 Laravel 中显示多个 Toast 通知