我是拉雷维尔的新手,这是我在拉雷维尔的第一个项目。像往常一样,首先我正在开发一个完整的用户身份验证系统。我可以注册一个用户,可以发送用户验证电子邮件,点击该链接后,我可以激活一个新的用户帐户,可以登录和注销。但在那之后,每当我尝试注册另一个新用户并单击验证链接后,我都会遇到一个异常,
Illuminate \ Database \ QueryException
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'users_code_unique' (SQL: update `users` set `code` = , `active` = 1, `updated_at` = 2014-07- 25 04:26:06 where `id` = 41)
现在这是我的路线。php,
<?php
Route::get('/',array(
'as' =>'home',
'uses' =>'HomeController@index'
));
Route::get('/signin',array(
'as' =>'signin',
'uses' =>'AccountController@signinGet'
));
Route::get('/signup',array(
'as' => 'signup',
'uses' => 'AccountController@signupGet'
));
/*
/*
/Authenticated Group
*/
Route::group(array('before' => 'auth'),function(){
/*
/Sign Out(GET)
*/
Route::get('/signout',array
(
'as' => 'signout',
'uses' => 'AccountController@signoutGet'
));
});
/*
/UnAuthenticated Group
*/
Route::group(array('before' => 'guest'),function(){
/* CSRF Protect*/
Route::group(array('before' => 'csrf'),function(){
/*
/ Create Account(POST)
*/
Route::post('/signup',array(
'as'=> 'signup',
'uses'=>'AccountController@signupPost'
));
/*
/ Sign In(POST)
*/
Route::post('/signin',array(
'as' => 'signin-post',
'uses' => 'AccountController@signinPost'
));
});
/*
/ Sign In (GET)
*/
Route::get('/signin',array(
'as' => 'signin',
'uses' => 'AccountController@signinGet'
));
/*
/Create Account(GET)
*/
Route::get('/signup',array(
'as' => 'signup',
'uses'=> 'AccountController@signupGet'
));
Route::get('signup/account/activate/{code}',array(
'as' =>'activate-account',
'uses' =>'AccountController@activatePost'
));
});
?>
这是我的账户管理员
<?php
class AccountController extends \BaseController {
public function signinGet()
{
return View::make('account.signin');
}
public function signinPost(){
$validator = Validator::make(Input::all(),array(
'email' => 'required|email',
'password' => 'required'
));
if($validator->fails()){
//redirect to the signin page
return Redirect::route('signin')
->withErrors($validator)
->withInput();
}else{
//Attempt user singin
$auth = Auth::attempt(array
(
'email' => Input::get('email'),
'password' => Input::get('password'),
'active' => 1
));
if($auth){
//Redirect To intented URL
return Redirect::intended('/');
}
else
{
return Redirect::route('signin')
->with('global','The username or password you provided is wrong or account not activated!');
}
}
return Redirect::route('signin')
->with('global','There is a problem Signing You in.');
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function signupGet()
{
return View::make('account.signup');
}
public function signupPost()
{
$validator = Validator::make(Input::all(), array(
'email' => 'required|max:255|email|unique:users',
'username' => 'required|min:3|unique:users',
'password' => 'required|min:6',
'password_again' => 'required|same:password'
)
);
if($validator->fails())
{
return Redirect::route('signup')
->withErrors($validator)
->withInput();
}else
{
$email = Input::get('email');
$username = Input::get('username');
$password = Input::get('password');
//Activation Code
$code = str_random(60);
$user = User::create(array(
'email' => $email,
'username' => $username,
'password' => Hash::make($password),
'code' => $code,
'active' => 0
)
);
if($user){
//User Activation Code Creation
Mail::send('emails.auth.activate', array('link' => URL::route('activate-account',$code), 'username' => $username),function($message) use ($user)
{
$message->to($user->email,$user->username)->subject('Activate Your Account');
});
return Redirect::route('signup')
->with('global','Your Account has been created! We have sent you an email to activate your account.Please Check the both the Inbox and Spam Folder.');
}
}
//return 'This is a Post Result';
}
public function activatePost($code){
$user = User::where('code','=',$code)->where('active','=',0);
if($user->count()){
$user = $user->first();
$user->active = 1;
$user->code = '';
if($user->save()){
return Redirect::route('home')
->with('global','Activated!.You can sign in now!');
}
}
else{
return Redirect::route('signup')
->with('global','Sorry!We could not activate your acount,please try again later.');
}
}
public function signoutGet(){
Auth::logout();
return Redirect::route('home');
}
}
?>
这是我的创建用户迁移文件
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration {
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('username',255)->unique();
$table->string('email',255)->unique();
$table->string('password',60);
$table->string('password_temp',60);
$table->string('code',60)->unique();
$table->integer('active');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
}
?>
这是我的用户。php
<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
public function getRememberToken()
{
return $this->remember_token;
}
public function setRememberToken($value)
{
$this->remember_token = $value;
}
public function getRememberTokenName()
{
return 'remember_token';
}
protected $fillable = array('email','username','password','password_temp','code','active');
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');
}
?>
现在有什么问题?
我找到了。您已经将代码列设置为唯一,尽管您在用户单击激活链接后将其设置为空字符串。表中已经有一行代码=";因此它会抛出一个错误。问题就在这里(tivatePost):
$user->code = '';
因此,要么不清空它,要么将其设置为其他值,要么将db colums设置为非唯一。
我会离开代码而不清空它,另外我会检查用户是否被激活-一个简单的如果
在激活后。也许这是一个好主意,验证用户不仅根据代码,而且与一个散列ID在链接。
您的问题可以使用验证器进行检查。只需这样使用:
use Validator;
use Request;
//...
//unique will pre check the key code weather if unique in tbl_name
public function yourfunc(Request $request) {
// set the rules to check
$rules = ['code'=>'required|unique:tbl_name'];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
// handler errors
$erros = $validator->errors();
}
//... everything is ok here
}
您可以在laravel验证中探索更多
确保您的code
字段可为null
,然后将其值设置为空字符串,而不是设置为空字符串:
$code = null;
然后,您将能够将其保存为NULL(MySQL),而它仍然是唯一的。
还要更改此项:
$user = User::where('code','=',$code)->where('active','=',0);
if($user->count()){
$user = $user->first();
致:
$user = User::where('code','=',$code)->where('active','=',0)->first();
if(count($user)){
您不需要调用db两次,只需检查返回的结果是否不为null(count
可以),这意味着它返回了一个User
对象。
我提交一个表单与AJAX和在网络我得到这个错误。 我正在使用Laravel5.6和迁移。这是此表的迁移。 这是我的控制器的功能。 我的文件上传成功,数据也被插入到数据库中,但我仍然收到这个错误。这不影响我,但想解决它吗?
我的迁移: 但会导致查询异常:( SQLSTATE[23000]:完整性约束冲突:密钥“users\u identifier\u unique”的1062重复条目“76561198364059468”
这是用户迁移: 更新:这是我的插入函数: 当我的数据库中有一个melli(如1234567890)并且我尝试再次写入1234567890时,就会发生此错误,因为melli字段是唯一的。
我有一个laravel 5项目,我想使用软删除方法,但每次删除后,我都会收到以下sql错误消息: 我试图关闭时间戳,但它没有停止,我用谷歌搜索它,我找不到任何解决方案。 迁移: 型号: 谢谢你的帮助。
我使用一个自定义的API请求到我的数据库来生成一个新的条目。 我的表格结构是这样的: 表结构 我将Incident_Type设置为唯一,因为这是我的系统的要求。当我向系统发布新条目时: 第一次很好。 第二次: 当我使用不同的事件id时,我得到错误: 为什么发送请求使用完全相同的条目,即使我更改了数据?我该怎么解决这个问题?
我下面Laravel-8教程从零开始。现在我在这个教程https://laracasts.com/series/laravel-8-from-scratch/episodes/30[][1]。但是当我跟随的时候 Illumb\Database\QueryException,消息为“SQLSTATE[23000]:完整性约束冲突:1062个重复条目“omnis”,用于键“categories\u n