php - queryexception - SQLSTATE[42S22]: Columna no encontrada: 1054 Columna desconocida-Laravel
sqlstate[42s22]: laravel (3)
Ha configurado la auth.php
y los members
usados para la autenticación, pero no hay ningún campo user_email
en la tabla de members
, por lo que, dice Laravel
SQLSTATE [42S22]: Columna no encontrada: 1054 Columna desconocida ''user_email'' en ''where clause'' (SQL: select * from members where user_email =? Limit 1) (Enlaces: array (0 => ''[email protected]'', )
Porque intenta hacer coincidir el user_email
en la tabla de members
y no está allí. De acuerdo con su configuración de auth
, laravel
está utilizando la tabla de members
para la tabla de autenticación no users
.
Estoy usando el marco Laravel.
Tengo 2 tablas (usuarios y miembros). Cuando quiero iniciar sesión, aparece el mensaje de error:
SQLSTATE [42S22]: Columna no encontrada: 1054 Columna desconocida ''user_email'' en ''where clause'' (SQL: select * from
members
whereuser_email
=? Limit 1) (Enlaces: array (0 => ''[email protected]'', )
Usuarios de mesa
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;
Miembros de la mesa
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;
Usuario de migración
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'');
});
}
Miembro de Migración
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'');
});
}
Usuario modelo
class User extends Eloquent {
protected $table = ''users'';
/**
* The primary key for the model.
*
* @var string
*/
protected $primaryKey = ''user_id'';
public $timestamps = false;
}
Miembro modelo
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'');
}
}
El modelo de miembro usa: use 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();
}
Controlador
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,
),
);
¿Qué estoy haciendo mal aquí?
No tiene un campo llamado user_email
en la tabla de miembros ... en cuanto a por qué, no estoy seguro ya que el código "parece" que debería intentar unirse en diferentes campos
¿El método Auth :: intento realiza una combinación del esquema? Ejecute grep -Rl ''class Auth'' /path/to/framework
y descubra dónde está el método de attempt
y qué hace.
Intenta cambiar donde la clase de miembro
public function users() {
return $this->hasOne(''User'');
}
return $this->belongsTo(''User'');