Laravel错误:SQLSTATE [42S02]:基表或视图没有找到

问题描述:

完整的错误:Laravel错误:SQLSTATE [42S02]:基表或视图没有找到

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'); 
    } 
} 

管理模式是这样的:

<?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' => '[email protected]', 
    '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');  

} 

我已经在compo中运行php artisan migrate ser,但是我得到了“无法迁移”的回应。我试图通过作曲家刷新数据库,但无济于事。表'管理员'显示在phpmyadmin中。

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

这个错误来自验证部分:

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

当为username你指的是admin数据库表中的唯一性检查,但是表被称为admins(用小号最后)。 因此Laravel正在寻找一个名为admin的表,当然这个表不存在。最后加上s,它应该工作。

+0

@ Frosty619我也相信这是事实。将'unique:admin'更改为'unique:admins'并让我们知道这是否可行。 – samuraiseoul

+0

非常感谢,这个作品(: – Frosty619

尝试特质后添加protected $table = 'admins';管理员模式。

+1

我不确定你的意思是“特质后”?我在'使用Authenticatable'之后添加了您建议的代码行;'在我的管理模式中,但我得到同样的错误。 – Frosty619

Laravel告诉你它找不到这样的表格。

dd()是你的朋友。

$admin = new Admin(); 
dd($admin); 

检查它的属性表有什么,它会以正确的方式指向你。

假设您的数据库配置已正确设置?

此外,当您迁移数据库并运行一个类时,它会将该步骤存储在迁移表中。

因此,如果您想迁移更多东西,那么您需要进行另一次迁移。

要进行更改,请使用Schema::table方法。

+0

我尝试了您的建议,并且我收到以下回复“Class app \ Admin is not defined”,这是超级怪异的,因为Admin是在app文件夹中定义的。 – Frosty619

+1

将其更改为\ App \ Admin – oseintow

不确定是否相关,但我得到了该消息,因为我的模型是与Db表不同的名称。如果模型不是复数形式,则可以在模型中添加受保护的表格名称。

+1

在模型类中添加受保护的表名。如下所述:protected $ table ='admins';在你的管理模式的顶部 – VineFreeman