Php SQLSTATE[42S22]:未找到列:1054未知列-Laravel
我使用的是框架Laravel 我有两个表(用户和成员)。当我想登录时,我会收到错误消息: SQLSTATE[42S22]:未找到列:中的1054未知列“用户电子邮件” “where子句”(SQL:select*fromPhp SQLSTATE[42S22]:未找到列:1054未知列-Laravel,php,sql,laravel,where,where-clause,Php,Sql,Laravel,Where,Where Clause,我使用的是框架Laravel 我有两个表(用户和成员)。当我想登录时,我会收到错误消息: SQLSTATE[42S22]:未找到列:中的1054未知列“用户电子邮件” “where子句”(SQL:select*frommemberswhereuser\u email=? 限制1)(绑定:数组(0=>'test@hotmail.com",), 表用户 CREATE TABLE IF NOT EXISTS `festival_aid`.`users` ( `user_id` BIGINT NOT
members
whereuser\u email
=?
限制1)(绑定:数组(0=>'test@hotmail.com",),
表用户
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');
}
}
成员模型使用:
使用Illumb\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();
}
auth.php
我做错了什么 成员表中没有名为
user\u email
的字段
... 至于为什么,我不确定,因为代码“看起来”应该尝试在不同的字段上加入
Auth::trument方法是否执行架构的联接?
运行
grep-Rl'class Auth'/path/to/framework
,找到尝试的位置和作用。您已经配置了Auth.php
并使用members
表进行身份验证,但是members
表中没有user\u email
字段,所以,拉维尔说
SQLSTATE[42S22]:未找到列:中的1054未知列“用户电子邮件”
“where子句”(SQL:select*从用户\电子邮件=?限制的成员中)
1) (绑定:数组(0=>)test@hotmail.com",),
因为,它试图匹配成员
表中的用户电子邮件
,但它不在那里。根据您的auth
配置,laravel
正在使用成员
表进行身份验证,而不是用户
表。尝试更改成员类的位置
public function users() {
return $this->hasOne('User');
}
return $this->belongsTo('User');
与Auth::trunt($credentials)相关的代码在哪里?这不是我模型中的代码吗:Member?我不熟悉这个框架,但是Auth::trunt是对Auth类的trunt方法的静态调用,而不是对Member::something成员模型使用以下命令:use-illumb\Auth\UserInterface;“用户电子邮件”字段位于“用户”表中。Auth::trunt仅将您重定向到主页或返回登录页面。否,这是成功调用Auth::trunt(read返回true)后指定的操作。您需要找到包含“class Auth”的代码。class Auth除了作为Laravel的IoC容器的门面之外,并不存在,该容器绑定到授权方法<代码>身份验证::尝试
使用laravels配置/扩展(通过闭包)构建身份验证实现。在成员表中没有user\u email
字段,但是是即时的。:)这就是重点,您必须查找您的验证(存在[table]),您必须确保您验证的表与行匹配。意思是:->SQLSTATE[42S22]:未找到列:在where子句中找到1054未知列“”,而where类是:->where('
=''),我可以在该表中的字母处获得帮助吗?所述列不可用@Gem实际上我是从soap API中得到这个错误的,我怎样才能在soap中更新。有人已经在Magento论坛上发表了文章,这是我的,虽然我也有同样的错误,但我还是混淆了belongsTo和hasMany,谢谢。
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,
),
);
public function users() {
return $this->hasOne('User');
}
return $this->belongsTo('User');