2016-06-24 8 views
0

私のデータベースには、device_idとdevice_tokenの2つの固有のキーを持つテーブル "app_sessions"があります。このテーブルに新しいセッションを挿入したいのは、device_idまたはdevice_tokenのレコードが存在しない場合のみです。それ以外の場合は、このレコードのセッションを更新してください。laravel 5.0での重複キー更新について†

"insert .... on duplicate key update ....."というクエリでこれを行うことができます。しかし、どうすればlaravel 5.0の雄弁を使ってこれを達成できますか?

注:最初にレコードを取得してから、結果に応じて挿入または更新するなど、他の方法もあります。

答えて

0

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_updateOrCreate

User::updateOrCreate(['email'=>'[email protected]'],['name'=>'foobar']); 

これは最初の配列に一致するユーザーをチェックした後、二番目の配列でこれを更新したり、その名前と電子メールで新しいユーザーを作成のどちらかでしょう。

+0

私はこのエラーがあります:Model.php行のMassAssignmentException 452: device_token。この関数を使用したとき、私はdevice_idを同じだが異なるdevice_tokenに保った。しかし、updateOrCreate関数はandとconditionの両方の列(device_idとdevice_token)をチェックします。ジェフ、あなたは私の質問をしていますか? – janardhan

+0

配列で更新できるようにするには、モデルの '$ fillable'配列に' device_token'を入れる必要があります。最初の配列は、すでに存在する場合にチェックしたい条件で、2番目の配列は更新したい条件でなければなりません。 – Jeff

+0

しかし、2つの条件がある場合、これは機能しません。ここで、 'device_id'が存在するかどうかを確認する必要があります。** OR **' device_token'が存在します。しかし、 'updateOrCreate'関数は' and condition'だけを受け入れます。 – janardhan

関連する問題