完整的错误:
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)
我知道错误是错误日志中显示的名称与其他任何地方(在数据库文件夹中)定义的名称不匹配,但我无法解决问题。我四处搜索并找到了这篇文章,但即使在我实施了解决方案(如下所示)之后,我也不断收到相同的错误。
我正在使用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' => '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');
}
我在作曲家中运行了php artisan migrate
,但我得到了"没有什么可迁移的"响应。我尝试通过作曲家刷新数据库,但无济于事。"admins"表显示在phpmyadmin中。
更新 1:添加了完整的错误消息
错误来自验证部分:
$this->validate($request, [
'username' => 'required|unique:admin|max:30|min:3',
'password' => 'required|min:5',
'password_confirm' => 'required'
]);
在检查username
的唯一性时,您指的是数据库中的admin
表,但是该表称为admins
(末尾带有 s)。因此,Laravel正在寻找一个名为admin
的桌子,这当然不存在。在末尾添加 s,它应该可以工作。
尝试在
特征后将protected $table = 'admins';
添加到管理模型中。
不确定是否相关,但我收到了该消息,因为我的模型与 Db 表的名称不同。 如果受保护的表名不是模型的复数形式,则可以在模型中添加受保护的表名。
Laravel告诉你它找不到这样的表。
dd()
是你的朋友。
$admin = new Admin();
dd($admin);
检查它在属性上的表是什么,它会为你指出正确的方向。
假设您的数据库配置已正确设置?
此外,当您迁移数据库并运行类时,它会将步骤存储在迁移表中。
因此,如果您想迁移更多内容,关键是您要进行另一次迁移。
若要进行更改,请使用 Schema::table
方法。