2016-05-31 1 views
0

У меня есть пользовательская разработанная функция пользователя/ролей с таблицей ролей и промежуточной таблицей user_roles. В таблице user_roles также есть некоторые дополнительные данные.Модель с поворотным устройством не устанавливается должным образом после отсоединения всех

Предположим, что пользователь в настоящее время имеет 1 назначенную ему роль, и я должен назначить еще 2 роли этому пользователю. В основном я просто отсоединяю все точки поворота для пользователя, а затем снова добавляю все 3 роли. Это упрощает вещи, и мне не нужно проверять данные json для повторяющихся enteries. Что-то вроде этого.

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

Это прекрасно работает и все записи пользователя шарнирные удаляются. Но когда я снова присоединяю все 3 роли к пользователю, добавляются только новые. Это действительно странно и уже несколько часов пытается отладить его.

Я прохожу через все 3 роли, и я убедился, что цикл действительно правильно принимает эти данные.

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

Я помню, что я столкнулся с очень похожим вопросом ранее и по другому проекту, но не помню решение. Любая помощь будет назначена.

+0

Вместо того, чтобы устанавливать/отсоединять, вы пробовали смотреть на синхронизацию? Не уверен, что это исправит вашу проблему, но это определенно удобно знать. – Karl

+0

спасибо karl. Я прокомментировал ответ на вопрос, почему использование синхронизации в моем случае немного сложнее. –

ответ

1

Вы можете использовать метод sync(). Вам нужны идентификаторы ролей, которые вы хотите назначить. Допустим, у вас есть флажки с идентификаторами роли.

@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

Хмм, я уверен, что несколько раз в тот же день столкнулся с той же проблемой, и исправил ее с помощью синхронизации. Однако вы можете попробовать написать $ user-> save() после отсоединения. Может работать. – Codearts

+0

ну, я думаю, синхронизация была правильной вещью, поэтому я изменил свой код для синхронизации, и это сработало. Однако не попробовали другое предложение относительно сохранения пользователя, но теперь я помню, что это действительно то, что я сделал в своем другом проекте. –

Смежные вопросы