SQLSTATE : colonna non trovata: 1054 Colonna sconosciuta – Laravel

Sto usando il framework Laravel.

Ho 2 tavoli (utenti e membri). Quando voglio accedere, ricevo il messaggio di errore:

SQLSTATE [42S22]: colonna non trovata: 1054 Colonna sconosciuta 'user_email' in 'where clausola' (SQL: select * dai members where user_email =? Limit 1) (Bindings: arrays (0 => '[email protected]', ))

Utenti della tabella

 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; 

Membri della tabella

 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; 

Utente di migrazione

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

Membro della migrazione

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

Utente model

 class User extends Eloquent { protected $table = 'users'; /** * The primary key for the model. * * @var string */ protected $primaryKey = 'user_id'; public $timestamps = false; } 

Membro model

 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 arrays */ protected $hidden = arrays('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'); } } 

Il model Membro utilizza: utilizzare Illuminate \ 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(); } 

controllore

 public function store() { $input = Input::all(); $rules = arrays('user_email' => 'required', 'member_password' => 'required'); $v = Validator::make($input, $rules); if($v->passes()) { $credentials = arrays('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 arrays( /* |-------------------------------------------------------------------------- | 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' => arrays( 'email' => 'emails.auth.reminder', 'table' => 'password_reminders', 'expire' => 60, ), ); 

Cosa sto facendo di sbagliato qui?

Hai configurato il auth.php e usato la tabella dei members per l'authentication ma non c'è nessun field user_email nella tabella dei members , quindi Laravel dice

SQLSTATE [42S22]: colonna non trovata: 1054 Colonna sconosciuta 'user_email' in 'where clausola' (SQL: select * dai membri where user_email =? Limit 1) (Bindings: arrays (0 => '[email protected]', ))

Perché, cerca di far corrispondere la user_email nella tabella dei members e non è lì. In base alla configuration laravel , laravel utilizza la tabella dei members per l'authentication e non la tabella degli users .

Non hai un field chiamato user_email nella tabella dei membri … per quanto riguarda il motivo, non sono sicuro che il codice "sembra" come dovrebbe cercare di partecipare su campi diversi

Il metodo Auth :: try esegue un join dello schema? Esegui grep -Rl 'class Auth' /path/to/framework e trova where si trova il metodo grep -Rl 'class Auth' /path/to/framework e cosa fa.

Prova a cambiare where class membro

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