Laravel - Integrity constraint violation: 1062 Duplicate entry
ich habe ein problem, wenn ich versuche, erstellen Sie einen neuen Benutzer in meiner Datenbank, wenn ich die Benutzer in phpmyadmin habe ich keine Probleme, aber wenn ich versuche, das erstellen von Benutzern in meinem laravel Website, die der Benutzer erstellt hat, mit dieser Fehlermeldung:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '15.236.964-5' für Schlüssel 'PRIMARY'
Habe ich derzeit keine Idee, die ist das problem, weil in der Datenbank nicht existieren die gleichen Primärschlüssel.
Die Tabelle mit den Problemen ist:
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`);
Mein controller:
JS:
class UsuarioController extends Controller
{
public function index(){
$users = User::All();
return view('usuario.index', compact('users'));
}
public function create(){
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');
}
}
Mein Modell:
JS:
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',
];
}
Kann ich nicht ändern der primary key auto_increment hinzufügen, weil ich die "Furche" als Primärschlüssel, wer ist der code, der die Identifikation der Menschen in Chile.
- scheint, wie 'Furche' ist primäre und einzigartig. Sie versuchen, hinzuzufügen, dass der Benutzer gleiche "Trott" und so, da Sie den Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgendermaßen vor:
1) Entfernen Sie
ADD UNIQUE KEY usuario_rut_unique (rut)
.Weil Sie bereits definiert, dass
rut
ist der primäre Schlüssel, also PKs sind immer eindeutig (es ist PKs-Verhalten)2) Definieren in Ihrem Modell, dass
rut
ist der primär-Schlüssel, und deaktivieren Sie die automatische Inkrementieren, weil es varchar (kein int kann nicht Durchlaufen werden natürlich) :3) Entfernen Sie diese Zeile:
weil Man schon einfügen von Datensatz zu Datenbank in die Vorherige Zeile.
War das problem eine Zeile code in den controller. Die Lösung war einfach diese Zeile auskommentieren:
Danke für die Antworten.
Ich habe es viele Male mit meinem Projekt. Hier sieht man zuerst einen Fehler gemacht, machen Sie eine Tabelle ohne Primärschlüssel, dann sind Sie es, ohne dass ein Unikat.
Ich glaube, Sie besser überprüfen Sie Ihre Datenbank-Tabellen mit Grafischer Benutzeroberfläche, wie z.B. MySQL Workbench.
Dann stellen Sie sicher, dass die Ansicht Eingabefeld hat die gleiche name-Attribut als Datenbank-Spalte-Namen. Das war das wichtigste, was ich habe Fehler.