を削除Laravelユーザーがソフトを削除して、再度アカウントを作成したいと考えていたケースを処理しようとすると(はい、それはアップグレードする価値がない古いアプリです)Laravel 4.2アプリで作業
を力した後、エントリを複製します。
「電子メール」列が一意であり、ソフト削除されたレコードがまだ存在するため、新しいユーザーの登録が機能しないという問題があります。
他のソフト削除されたレコードとの関係を維持するために、同じ増分IDを持つ新しいユーザーレコード(他のすべてのフィールドが空の)を作成する方がはるかに好きです。
古いレコードを物理的に削除し、古いIDで新しいレコードを作成しますか?右?働いていない。
レコードのforceDelete()を呼び出すと、データベースからレコードが削除されますが、その後に新しいレコードを作成しようとすると「重複キー」例外がスローされます。古いレコードが表示されないので、ページを更新することはもはや問題ではありません。
挿入クエリを実行する前にPHPが削除クエリへの応答を待つべきですが、mysqlはこの時点でレコードが削除されていることを知っている必要があります。
このエラーは実際にLaravelのメモリキャッシュから発生している可能性はありますか?
また、Sentinel認証パッケージを使用しています(該当する場合)。ここ
は、基本的なコードである:
$found = User::where('email', $email)->first();
if ($found->deleted_at) {
$old_id = $found->id;
$found->forceDelete();
$found->save();
$unique_id = $this->generateUnique(NULL, $first_name . $last_name);
$user = Sentinel::registerAndActivate(array(
'id' => $old_id,
'email' => $email,
'password' => $password,
'first_name' => $first_name,
'last_name' => $last_name,
'unique_id' => $unique_id,
'preferred_lang' => $this->locale,
));
}
これは
SQLSTATE [23000]で結果:整合性制約違反:キーの1062重複エントリ '[email protected]' ' users_email_unique '
これは誰でも知っていますか?簡単な解決法はありますか?ドキュメントから
申し訳ありませんが、私は単にレコードを復元したくないということを明確にしておきました。この理由は、新しいユーザーレコードとして表示され、モデルイベントに基づいて履歴を作成するためです。 I.復元すると、「作成済み」の代わりに「更新された」履歴が生成されます。 –