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,它应该工作。
尝试特质后添加protected $table = 'admins';
管理员模式。
我不确定你的意思是“特质后”?我在'使用Authenticatable'之后添加了您建议的代码行;'在我的管理模式中,但我得到同样的错误。 – Frosty619
Laravel告诉你它找不到这样的表格。
dd()
是你的朋友。
$admin = new Admin();
dd($admin);
检查它的属性表有什么,它会以正确的方式指向你。
假设您的数据库配置已正确设置?
此外,当您迁移数据库并运行一个类时,它会将该步骤存储在迁移表中。
因此,如果您想迁移更多东西,那么您需要进行另一次迁移。
要进行更改,请使用Schema::table
方法。
不确定是否相关,但我得到了该消息,因为我的模型是与Db表不同的名称。如果模型不是复数形式,则可以在模型中添加受保护的表格名称。
在模型类中添加受保护的表名。如下所述:protected $ table ='admins';在你的管理模式的顶部 – VineFreeman
@ Frosty619我也相信这是事实。将'unique:admin'更改为'unique:admins'并让我们知道这是否可行。 – samuraiseoul
非常感谢,这个作品(: – Frosty619