2016-06-21 53 views
2

我有一个问题,当我尝试在我的数据库中创建一个新用户时,如果我在phpmyadmin中添加用户,我没有任何问题,但是当我尝试在我的laravel web中创建用户时,用户创建这个错误: SQLSTATE [23000]:完整性约束违规:1062重复条目'15.236.964-5'键'PRIMARY' 我没有想法这是问题,因为在数据库中不存在相同的主键。 有问题的表是:Laravel - 完整性约束违规:1062重复条目

CREATE TABLE IF NOT EXISTS `users` (
`rut` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `password` char(60) COLLATE utf8_unicode_ci NOT NULL, 
    `edad` int(11) NOT NULL, 
    `pais` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `comuna` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `sector` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `tipo` enum('profesor','alumno','administrador_parrilla','administrador_sistema','externo') COLLATE utf8_unicode_ci NOT NULL, 
    `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `created_at` timestamp NULL DEFAULT NULL, 
    `updated_at` timestamp NULL DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

ALTER TABLE `users` 
    ADD PRIMARY KEY (`rut`), 
    ADD UNIQUE KEY `usuario_rut_unique` (`rut`), 
    ADD UNIQUE KEY `usuario_email_unique` (`email`); 

我的控制器:

class UsuarioController extends Controller 
 
{ 
 
\t public function index(){ 
 
     $users = User::All(); 
 
     return view('usuario.index', compact('users')); 
 
    } 
 

 
    public function create(){ 
 
    \t return view('usuario.create'); 
 
    } 
 
    public function store(Request $request) { 
 
     User::create([ 
 
      'name' => $request['name'], 
 
      'rut' => $request['rut'], 
 
      'email' => $request['email'], 
 
      'password' => bcrypt($request['password']),    
 
      'edad' => $request['edad'], 
 
      'pais' => $request['pais'], 
 
      'comuna' => $request['comuna'], 
 
     ]); 
 
     User::create($request->all()); 
 
     return redirect('/usuario')->with('message', 'store'); 
 
    } 
 

 
    public function edit($rut){ 
 
     $user = User::find($rut); 
 
     return view ('usuario.edit',['user'=>$user]); 
 
    } 
 

 
    public function update($id, Request $request){ 
 
     $user = User::find($id); 
 
     $user -> fill($request->all()); 
 
     $user -> save(); 
 

 
     Session::flash('message', 'Usuario Editado Correctamente'); 
 
     return Redirect ('/usuario'); 
 
    } 
 
}

我的模型:

class User extends Authenticatable 
 
{ 
 
    /** 
 
    * The attributes that are mass assignable. 
 
    * 
 
    * @var array 
 
    */ 
 
    protected $table = "users"; 
 
    protected $fillable = [ 
 
     'rut', 'name', 'email', 'password', 'edad', 'pais', 'comuna', 'sector', 'tipo', 
 
    ]; 
 
/** 
 
    protected $primaryKey = 'rut'; 
 

 
    
 
    * The attributes that should be hidden for arrays. 
 
    * 
 
    * @var array 
 
    */ 
 
    protected $hidden = [ 
 
     'password', 'remember_token', 
 
    ]; 
 
}

我无法更改添加auto_increment的主键,因为我使用“Rut”作为智能身份验证代码的主键。

+0

看起来像'辙'是主要和独特的。你正在尝试添加具有相同“车辙”的用户,因此发生错误。 –

回答

2

问题是代码在控制器的线。解决方法是简单地评论此行:

User::create($request->all()); 

感谢您的答案。

4

待办事项以下步骤:

1)拆下ADD UNIQUE KEY usuario_rut_unique (rut)

,因为你已经定义了rut是主键,这样的PK始终是唯一的(它的PK行为)

2)定义在你的模型rut是主键,并禁用自动递增,因为它是为varchar(不是int不能自然地迭代):因为你是人

User::create($request->all()); 

/** 
* primaryKey 
* 
* @var integer 
* @access protected 
*/ 
protected $primaryKey = 'rut'; 
/* 
You cannot comment it to make in disabled, it will look for `id` param by default. 
You cannot set it to be = null because in Your code You use ::find() function 
that looks for primaryKey. 
*/ 

/** 
* Indicates if the IDs are auto-incrementing. 
* 
* @var bool 
*/ 
public $incrementing = false; 

3)删除此行准备好将记录插入到上一行的数据库中。

0

我已经多次与我的项目。在这里,你首先犯了一个没有主键的表,但是你没有做出独特的表。
我想你最好使用图形用户界面(如MySQL Workbench)检查数据库表。

然后确保您的视图的输入字段具有与您的数据库列名称相同的名称属性。这是我得到错误的主要原因。

{!! Form::text('rut',null,['class'=>'form-control']) !!} 
+0

我使用mysql工作台检查数据库,我找不到错误,但创建了另一个名为“id”的主键,它与自动递增选项一起工作。它适用于错误,但现在两个用户使用除数据库中的id之外的相同属性创建。奇怪的是,一个用户拥有加密的密码,另一个用户拥有密码。 – Bullgod

+0

我的表单是:

{!! Form::label('rut') !!} {!! Form::text('rut',null, ['class'=>'form-control','placeholder'=>'Ingresa el rut del usuario']) !!}
{!! Form::label('nombre') !!} {!! Form::text('nombre',null, ['class'=>'form-control','placeholder'=>'Ingresa el nombre del usuario']) !!}
{!! Form::label('contrasena') !!} {!! Form::text('contrasena',null, ['class'=>'form-control','placeholder'=>'Ingresa la contraseña del usuario']) !!}
Bullgod

+0

什么是'nombre','contrasena'...他们不是数据库列名。 Form :: text('rut',null,['class'=>'form-control','placeholder'=>'Ingresa el rut del usuario'])}}这个,'rut'是一个数据库表列值。 – Sachith

相关问题