当前位置: 首页 > 知识库问答 >
问题:

SQLSTATE[42S22]:未找到列:1054未知列-Laravel

夏建木
2023-03-14

我使用的框架Laravel。

我有两个表(用户和成员)。当我想登录时,我会收到错误消息:

SQLSTATE[42S22]:找不到列: 1054未知的列'user_email'in'where子句'(SQL:选择*from成员whereuser_email=?限制1)(绑定:数组(0=

表用户

CREATE TABLE IF NOT EXISTS `festival_aid`.`users` (
  `user_id` BIGINT NOT NULL AUTO_INCREMENT,
  `user_email` VARCHAR(45) NOT NULL,
  `user_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user_modified` TIMESTAMP NULL,
  `user_deleted` TIMESTAMP NULL,
  `user_lastlogin` TIMESTAMP NULL,
  `user_locked` TIMESTAMP NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE INDEX `user_email_UNIQUE` (`user_email` ASC),
ENGINE = InnoDB;

表成员

CREATE TABLE IF NOT EXISTS `festival_aid`.`members` (
  `member_id` BIGINT NOT NULL AUTO_INCREMENT,
  `member_password` CHAR(32) NOT NULL,
  `member_salt` CHAR(22) NOT NULL,
  `member_token` VARCHAR(128) NULL,
  `member_confirmed` TIMESTAMP NULL,
  `user_id` BIGINT NOT NULL,
  PRIMARY KEY (`member_id`, `user_id`),
  INDEX `fk_members_users1_idx` (`user_id` ASC),
  CONSTRAINT `fk_members_users1`
    FOREIGN KEY (`user_id`)
    REFERENCES `festival_aid`.`users` (`user_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

迁移用户

public function up()
    {
        Schema::table('users', function(Blueprint $table)
        {
            $table->increments('user_id');

            $table->string('user_email');
            $table->timestamp('user_created');
            $table->timestamp('user_modified');
            $table->timestamp('user_deleted');
            $table->timestamp('user_lastlogin');
            $table->timestamp('user_locked');
        });
    }

移民成员

public function up()
    {
        Schema::table('members', function(Blueprint $table)
        {
            $table->increments('member_id');

            $table->string('member_password');
            $table->string('member_salt');
            $table->string('member_token');

            $table->foreign('user_id')
                ->references('id')->on('users');
            //->onDelete('cascade');

            $table->timestamp('member_confirmed');
        });
    }

模型用户

class User extends Eloquent {

    protected $table = 'users';

    /**
     * The primary key for the model.
     *
     * @var string
     */
    protected $primaryKey = 'user_id';

    public $timestamps = false;
}

模范会员

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

class Member extends Eloquent implements UserInterface, RemindableInterface {

    protected $table = 'members';

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('member_password');

    /**
     * Get the unique identifier for the user.
     *
     * @return mixed
     */
    public function getAuthIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->member_password;
    }

    /**
     * Get the e-mail address where password reminders are sent.
     *
     * @return string
     */
    public function getReminderEmail()
    {
        return $this->email;
    }

    /**
     * The primary key for the model.
     *
     * @var string
     */
    protected $primaryKey = 'member_id';

    public $timestamps = false;

    public function users()
    {
        return $this->hasOne('User');
    }
}

成员模型使用:使用照明\Auth\UserInterface;

<?php namespace Illuminate\Auth;

interface UserInterface {

    /**
     * Get the unique identifier for the user.
     *
     * @return mixed
     */
    public function getAuthIdentifier();

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword();

}

控制器

public function store()
    {
        $input = Input::all();

        $rules = array('user_email' => 'required', 'member_password' => 'required');

        $v = Validator::make($input, $rules);

        if($v->passes())
        {
            $credentials = array('user_email' => $input['user_email'], 'member_password' => $input['member_password']);

            if(Auth::attempt($credentials))
            {
                return Redirect::to('/home');

            } else {

                return Redirect::to('login');
            }

        } else {

            return Redirect::to('login')->withErrors($v);
        }
    }

auth.php

return array(

    /*
    |--------------------------------------------------------------------------
    | Default Authentication Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the authentication driver that will be utilized.
    | This drivers manages the retrieval and authentication of the users
    | attempting to get access to protected areas of your application.
    |
    | Supported: "database", "eloquent"
    |
    */

    'driver' => 'eloquent',

    /*
    |--------------------------------------------------------------------------
    | Authentication Model
    |--------------------------------------------------------------------------
    |
    | When using the "Eloquent" authentication driver, we need to know which
    | Eloquent model should be used to retrieve your users. Of course, it
    | is often just the "User" model but you may use whatever you like.
    |
    */

    'model' => 'Member',

    /*
    |--------------------------------------------------------------------------
    | Authentication Table
    |--------------------------------------------------------------------------
    |
    | When using the "Database" authentication driver, we need to know which
    | table should be used to retrieve your users. We have chosen a basic
    | default value but you may easily change it to any table you like.
    |
    */

    'table' => 'members',

    /*
    |--------------------------------------------------------------------------
    | Password Reminder Settings
    |--------------------------------------------------------------------------
    |
    | Here you may set the settings for password reminders, including a view
    | that should be used as your password reminder e-mail. You will also
    | be able to set the name of the table that holds the reset tokens.
    |
    | The "expire" time is the number of minutes that the reminder should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'reminder' => array(

        'email' => 'emails.auth.reminder',

        'table' => 'password_reminders',

        'expire' => 60,

    ),

);

我做错了什么?

共有3个答案

夏侯昆琦
2023-03-14

尝试更改成员类的位置

public function users() {
    return $this->hasOne('User');
} 

return $this->belongsTo('User');
鄢朝斑
2023-03-14

在成员表中没有名为user_email的字段...至于为什么,我不确定代码看起来应该尝试加入不同的字段

Auth::attempt方法是否执行模式的连接?运行grep-Rl'class Auth' /path/to/framework并找到尝试方法的位置及其功能。

洪开诚
2023-03-14

Laravel说,您已经配置了auth.php并使用members表进行身份验证,但是members表中没有user\u email字段

SQLSTATE[42S22]:找不到列: 1054未知的列'user_email'在'where子句'(SQL:选择*从成员那里user_email=?限制1)(绑定:数组(0=

因为,它试图匹配成员表中的用户电子邮件,但它不在那里。根据您的auth配置,laravel正在使用成员表进行身份验证,而不是用户表。

 类似资料:
  • 我是编程界的新手,我自己在学习laravel,我发现了这个错误:SQLSTATE[42S22]:Column not found:1054未知列'clientes.clientes\u id'在'where子句中(SQL:select*fromwhere=1和不为空)(视图:/shared/httpd/laravel_8_crud/resources/views/pedidos/index.bla

  • 我正在尝试使用PDO向MySQL插入一条记录,下面的代码中可以看到我的sql语句。 当执行此代码时,我会遇到以下错误消息; SQLState[42S22]:找不到列:1054“Field List”中的未知列“John” 这无疑是解决这个问题的一个简单方法,但我似乎看不出来,有人能给我指明正确的方向吗?

  • 问题内容: 我正在使用Laravel框架。 我有2个表(用户和成员)。当我想登录时,收到错误消息: SQLSTATE [42S22]:找不到列:1054’where子句’中的未知列’user_email’(SQL:select * from where =?limit 1)(绑定:数组(0 =>'test@hotmail.com‘,)) 表用户 表成员 迁移用户 移民会员 模型使用者 模范会员 成

  • 我的代码:数据库中的值未更新,出现以下错误: (照明\数据库\查询异常(42S22)SQLSTATE[42S22]:找不到列: 1054未知列'用户名'在'where子句'(SQL:选择计数()作为聚合从其中=anikatabassum))和("SQLSTATE[42S22]:找不到列: 1054未知列'用户名'在'where子句'(SQL:选择计数()作为聚合从其中=anikatabassum)

  • 我正在制作一个我想登录和注册的应用程序,并且能够将csv文件导入数据库,注册和登录工作正常,但是当我想导入csv时,我遇到了这个问题: 错误luminate\Database\QueryException SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“classe”(SQL:select*fromwhere(=7和=7598)限制1)科目表 账户控制员

  • 我有查询异常SQLSTATE[42S22]:列未找到: 1054 Champ'3'在子句(SQL:选择,,从内连接