Intereting Posts
Salesforce / PHP – массовое исходящее сообщение (SOAP), проблема с тайм-аутом – см. Обновление # 2 Проверьте, содержит ли url http: // или https: // Запрос PHP xpath на XML с привязкой пространства имен по умолчанию скачать файл csv laravel blade включает ошибку – синтаксическую ошибку, неожиданный Пытается использовать PHP DateTime Class с Yii2, получившим класс не найденных ошибок Как отключить уведомление и предупреждение в PHP в файле .htaccess? Вывод массива в PHP PHP Speed ​​Vs Другие языки Лучшая практика: как структурировать массивы – стандарты и соглашения об именах Выход короткого кода всегда отображается в верхней части настраиваемого шаблона Laravel 4: Как передать несколько необязательных параметров принудительное скачивание файла как получить весь массив объектов с одним значением? PHP с использованием регулярного выражения для синтаксического анализа строки запроса

Метод Laravel Sync отправляет только 2-е данные

Этот фрагмент кода должен удалять все старые данные из базы данных и добавлять новые (используя sync ())

Теперь у меня есть проект с пользователями, и пользователь может быть связан с проектом с помощью флажка.

Таким образом, флажок установлен, эта функция будет запускаться, но, например, когда я говорю, что user 1 и user 2 проходят через этот fuction, чтобы добавить в pivot table он отправит только user 2 , а user 1 не пройдет, что идет не так?

И когда я добавлю 3 пользователя user 1 , user 2 , user 3 , добавится только user 2 .

контроллер

 public function update(CreateProjectRequest $request) { if($request->get('contribute')) { foreach($request->get('contribute') as $k => $contribute) { if($contribute == 1) { $project = $this->project->find($request->project_id); $project->users()->sync(array($k)); } } } $project = $this->project->find($request->project_id); $project->fill($request->input())->save(); return redirect('project'); } 

лопасть

 @foreach($users as $user) <tr> <td> {{$user->firstname}} {{$user->middlename}} {{$user->lastname}} </td> <td> {!! Form::checkbox('contribute['.$user->id.']', '1', $user->projects->contains('id', $project->id)) !!} </td> </tr> @endforeach 

На dd($request->input()); в начале моего метода обновления (с выбором по крайней мере 3 пользователей) это получит взамен:

  array:9 [▼ "_method" => "PATCH" "_token" => "0uIZNn6zwZjVKfgE0ckhDULeYda0OaLzKVdUgoM8" "name" => "Dire Straits" "completion_date" => "2015-05-18" "DataTables_Table_0_length" => "10" "contribute" => array:3 [▼ 1 => "1" 3 => "1" 2 => "1" ] "completed" => "1" "active" => "0" "project_id" => "11" ] 

Таким образом, user_id будет user_id и => 1 должно быть значением.

Проблема в том, что sync вызывается в loop 3 раза, поэтому каждый раз она синхронизирует одно значение. Вы должны передать массив идентификаторов в sync ex:

 $project->users()->sync([1,3,2]); 

Или, если вы хотите, вы можете использовать attach при contribute==1 и detach при contribute==0

Или если contribute не возвращает вход, когда пользователь отменен, и он возвращается только после его выбора, вы можете попробовать:

 $this->project->users()->sync(array_keys($request->get('contribute')); 

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

 $project = $this->project->find($request->project_id);