Php SQLSTATE[42S02]:未找到基表或视图:1146

Php SQLSTATE[42S02]:未找到基表或视图:1146,php,laravel,laravel-5.2,Php,Laravel,Laravel 5.2,我正在尝试以管理员身份登录。我对我的用户使用了多重身份验证,一个运行良好,另一个用于我尝试登录的管理员,但当我在数据库中插入正确的值时,我使用种子手动插入了值,这给了我一个错误,我不知道原因 我所做的是配置我的auth.php,这样我就可以对用户和管理员进行两次身份验证 <?php return [ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], 'guards' =

我正在尝试以管理员身份登录。我对我的用户使用了多重身份验证,一个运行良好,另一个用于我尝试登录的管理员,但当我在数据库中插入正确的值时,我使用种子手动插入了值,这给了我一个错误,我不知道原因

我所做的是配置我的auth.php,这样我就可以对用户和管理员进行两次身份验证

<?php

return [



'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],



'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],

    'admins' => [
        'driver'   => 'session',
        'provider' => 'admins'
    ]
],



'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],

     // For admin
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class
    ]

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],



'passwords' => [
    'users' => [
        'provider' => 'users',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],

    'admins' => [
        'provider' => 'admins',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],

];
admin.blade.php

<form class = "form-vertical" role = "form" method = "post" action = "{{ route ('auth.admin') }}">

            <div class = "form-group {{ $errors->has('username') ? 'has-errors' : '' }}">
                <label for = "username" class = "control-label">Username</label>
                <input type = "text" name = "username" class = "form-control">

                @if ($errors->has('username'))
                    <span class = "help-block">{{ $errors->first('username') }}</span>
                @endif
            </div>

            <div class = "form-group {{ $errors->has('password') ? 'has-errors' : '' }}">
                <label for = "password" class = "control-label">Password</label>
                <input type = "password" name = "password" class = "form-control">

                @if ($errors->has('password'))
                    <span class = "help-block">{{ $errors->first('password') }}</span>
                @endif

            </div>

            <div class = "checkbox">
                <label>
                    <input type = "checkbox" name = "remember">Remember me</input>
                </label>
            </div>

            <div class = "form-group">
                <button type = "submit" class = "btn btn-default">Login</button>
            </div>

            <input type = "hidden" name = "_token" value = "{{ Session::token() }}">

        </form>

用户名
@如果($errors->has('username'))
{{$errors->first('username')}
@恩迪夫
密码
@如果($errors->has('password'))
{{$errors->first('password')}
@恩迪夫
记得我吗
登录

错误消息旁边的SQL查询显示

select count(*) as aggregate from `admin` where `password`=admin
现在,在WHERE子句中,密码被反勾选,所以我假设它是一列(而不是一个表)。反勾号通常在SQL中用于表名或列名。但是,您可以将列名与admin进行比较,而不使用勾号admin'不是保留字,并且在查询中不会引用为文本字符串,因此数据库服务器会开始查找与该名称匹配的表

那么,你有没有尝试在那里添加引号

SELECT COUNT(*) AS aggregate FROM `admin` WHERE `password`='admin'
编辑:

如果所有其他操作都失败,您可能还希望简单地转储正在发出的数据库查询。添加侦听器/转储:

\DB::listen(function($sql, $bindings, $time) {
    var_dump($sql);
    var_dump($bindings);
    var_dump($time);
});

…并检查输出。

您的表名在这里有疑问。。。我们认为应该是AdminTableSeeder中的“admins”,如下所示:

        use Illuminate\Database\Seeder;

        class AdminTableSeeder extends Seeder {

            public function run() {
                DB::table('admins')->delete();  //<== "admins" AS DEFINED IN YOUR CONFIG::: NOT "admin"

                $admin = array(
                array('username' => 'admin',       
                      'password' => Hash::make('admin'))
                );

                DB::table('admins')->insert($admin);
            }
        }
使用照明\数据库\播种机;
类AdminTableSeeder扩展了播种器{
公共功能运行(){
DB::table('admins')->delete();//'admin',
'password'=>Hash::make('admin'))
);
DB::table('admins')->insert($admin);
}
}

AdminTableSeeder-种子

使用truncate而不是delete
use Illuminate\Database\Seeder;

class AdminTableSeeder extends Seeder
{
public function run()
{
  DB::table('admins')->truncate();

  $admins = array(
  array('username' => 'admin',
        'password' => Hash::make('admin'))
  );

  DB::table('admins')->insert($admins);
 }
 }

您的播种机引用了一个
admin
表,而其他所有内容都引用了
admins
@Mei,我没有注意到这一点。已经更新了。“我还是有错误的地方。”梅:你的观察似乎很正确。。。(Francisunox)你是说你在这篇文章中更新了它还是在你自己的代码中更新了它?@Poiz我也更新了同样的内容。但还是会出错。有任何帮助吗?原始SQL不包含
其中username='admin'
,因此请检查HTML中的字段是否具有正确的name属性。代替
dd('error')
try dd($request->only(['username','password'])。用户名和密码的管理员。是我在数据库中植入的值。因此我没有在这里使用任何Select语句。@francisunox是消息的顶部框(QueryException)包含我上面引用的SQL查询。因此,是的,它是一个Select语句,但它可能是由Laravel在幕后发出的。您可以使用调用堆栈查看从何处调用Connection.php:680吗?它可能是$this->validate()唯一的:admin?我要在哪里插入这个
DB:listen
?尽可能晚,就在您要调试的代码之前,尽量少一些“无关的”尽可能的打印输出?你能提供例子吗?我没有完全理解你说的话,兄弟。已经这么做了兄弟。我得到了一个新的错误。它不会对我进行身份验证。我已经在配置中进行了多次身份验证。为什么我仍然无法登录?
select count(*) as aggregate from `admin` where `password`=admin
SELECT COUNT(*) AS aggregate FROM `admin` WHERE `password`='admin'
\DB::listen(function($sql, $bindings, $time) {
    var_dump($sql);
    var_dump($bindings);
    var_dump($time);
});
        use Illuminate\Database\Seeder;

        class AdminTableSeeder extends Seeder {

            public function run() {
                DB::table('admins')->delete();  //<== "admins" AS DEFINED IN YOUR CONFIG::: NOT "admin"

                $admin = array(
                array('username' => 'admin',       
                      'password' => Hash::make('admin'))
                );

                DB::table('admins')->insert($admin);
            }
        }
use Illuminate\Database\Seeder;

class AdminTableSeeder extends Seeder
{
public function run()
{
  DB::table('admins')->truncate();

  $admins = array(
  array('username' => 'admin',
        'password' => Hash::make('admin'))
  );

  DB::table('admins')->insert($admins);
 }
 }