2016-04-12 2 views
1

を削除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 '

これは誰でも知っていますか?簡単な解決法はありますか?ドキュメントから

答えて

0

私は実際に私のコードが動作するようになった...

は私が

$found->save()

が削除されたレコードを更新するために呼び出す必要があったことをどこかで読ん、それはまだ私のために働いていませんでした。

は奇妙なことに、

$found->update()

への切り替えが働いていました。

0

https://laravel.com/docs/4.2/eloquent):

復元方法を使用して、アクティブ状態にソフト削除モデルを復元するには、所与のモデルインスタンスがソフト削除されたかどうかを決定するために

$user->restore(); 

、あなたはゴミ箱メソッドを使用することができます:

if ($user->trashed()) 
{ 
// 
} 
+0

申し訳ありませんが、私は単にレコードを復元したくないということを明確にしておきました。この理由は、新しいユーザーレコードとして表示され、モデルイベントに基づいて履歴を作成するためです。 I.復元すると、「作成済み」の代わりに「更新された」履歴が生成されます。 –