2016-06-21 29 views
2

データベースに新しいユーザーを作成しようとすると問題が発生します。phpmyadminでユーザーを追加すると問題はありませんが、自分のlaravel web SQLSTATE [23000]:整合性制約違反:1062キー 'PRIMARY'の重複するエントリ'15 .236.964-5 ' データベースが存在しないため、問題があるとは思わない同じ主キー。 問題を持つテーブルには、次のとおりです。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

「rut」はプライマリでユニークなようです。あなたは同じ '轍(rut)'を持つユーザーを追加しようとしているため、エラーが発生しています。 –

答えて

2

問題は、コントローラ内のコードの行でした。解決策は、単にこの行をコメントすることでした:

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

お返事ありがとうございます。

4

は、以下のステップを実行します。

1)ADD UNIQUE KEY usuario_rut_unique (rut)を削除します。

あなたは既にのPKは常にユニークであるのでrutは、主キーであることを定義したので(それはPKの行動だ)

2)それはvarchar型だから(int型ではないrutが主キーであることをあなたのモデルで定義し、自動インクリメントを無効にします)自然に反復することができません:あなたはアルだから

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 workbenchでデータベースをチェックしても、エラーを見つけることはできませんが、自動インクリメントオプションで動作する "id"という別のプライマリキーを作成できませんでした。これはエラーのために働いていましたが、データベース内のIDを除いて同じ属性を持つ2人のユーザーが作成されるようになりました。奇妙なことは、一方のユーザーが暗号化されたパスワードを持っていて、もう一方のユーザーがパスワードを書いていることです。 – 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

「ノンブル」、「contrasena」何...彼らは{のようなデータベースの列names.useではありません! Form :: Text( 'rut'、null、['class' => 'フォームコントロール'、 'プレースホルダ' => 'Ingresa el rut del usuario'])}} this、 ここに 'rut'はデータベースですテーブルの列の値。 – Sachith

関連する問題