2016-05-31 10 views
0

ロールテーブルとuser_roles中間テーブルを使用して、独自に開発したユーザー/ロール機能があります。 user_rolesテーブルには、いくつかの追加データもあります。デタッチ後にピボットモデルが正しく接続されない

ユーザーは現在、自分に1つの役割が割り当てられており、このユーザーに2つ以上の役割を割り当てる必要があるとします。ほとんどの場合、私はすべてのピボットエンタープライズをユーザー用に切り離し、3つの役割をすべてもう一度追加します。これは物事を簡素化し、私は重複enteriesのjsonデータをチェックする必要はありません。このようなもの。

$user->roles()->detach(); 

これは正常に動作し、すべてのユーザーピボットエントリは削除されます。しかし、3つの役割をすべてユーザーに再度アタッチすると、新しい役割だけが追加されます。これは本当に奇妙で、数時間デバッグしようとしています。

私は3つの役割を全てループしています。ループが実際にこのデータを正しく受信していることを確認しました。

$apps = json_encode(array('app1','app2')); 
$user->roles()->attach($roleId, ['apps' => $apps]); 

私は、私も別のプロジェクトに以前の非常に同様の問題に直面したことを覚えていますが、解決策を覚えていけません。どんな援助も訴えられるでしょう。

+0

着脱する代わりに、同期してみましたか?これで問題が解決するかどうかはわかりませんが、間違いなく知っておくと便利です。 – Karl

+0

おかげでカール。私はなぜコードを使用して私のケースでは少し複雑な同期を使用しているように答えたコメントをしています。 –

答えて

1

sync()メソッドを使用できます。割り当てるロールのIDが必要です。ロールIDを保持するチェックボックスがいくつかあるとします。お使いのコントローラで次に

@foreach($roles as $role) 
<input type="checkbox" name=role[] value="{{ $role->id }}" 
@endforeach 

$user-roles()->sync($request['roles']); //$request['roles'] contains the ids of the new roles you want to assign 

希望は、この役に立ちました。

+0

答えをありがとう、私は同期について知っている。しかし、私は現在の役割を取得して新しい役割を割り当てるために最初にクエリを実行する必要があるため、ここでそれを使用することはより複雑になります。また、追加する前に計算する必要がある追加のjsonフィールドもたくさんあります。私は他のプロジェクトでも同様の問題に直面していたので、なぜこれが起こるのか簡単な説明を求めています。 –

+0

Hmm私は数日前に同じ問題に遭遇したと確信しています。しかし、分離後に$ user-> save()を書くことができます。うまくいくかもしれない。 – Codearts

+0

よく私は同期が正しいことだと思うので、私は同期のために自分のコードを変更し、それは働いた。ユーザーを保存することに関するあなたの他の提案を試してみませんでしたが、これは私が他のプロジェクトで行ったことだったことを今思い出しています。 –

関連する問題