@Mass1veDit
c#,php

Sync синхронизирует,но удаляет другие записи в бд,что нужно чтобы новые записи синхронизировались только для текущего пользователя?

Получаю пользователя через checkbox,также получаю массив с товарами которые отмечены в checkbox

Дело в том что все работает,например $data[$user->id] отправляет массив товаров и id пользователя в метод saveProducts.
Все прекрасно записывается,но дело в то что удаляются записи для другого пользователя.В чем может быть ошибка?
Далее
$data = $request->except('_token');
        $users = User::all();
        foreach ($users as $user){
            if(isset($data[$user->id])){
                $user->saveProducts($data[$user->id]);
            }
            else {
                $user->saveProducts([]);
            }
        }

Метод для сохранения товаров
public function saveProducts($products)
    {
        if(!empty($products)){
            $this->products()->sync($products);
        }
        else{
            $this->products()->detach();
        }
    }

Связь в модели User
public function products() {
        return $this->belongsToMany(Product::class,'product_user');
    }
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
spoiler
Текущего пользователя можно получить

\Auth::user()
// или
$request->user()


UPD

Если админ может редактировать одновременно только одного пользователя, то необязательно передавать массив данных как вы показывали выше
Можно ID пользователя передать в отдельном скрытом поле.
То есть примерно так

<input type=hidden name=user_id value={{ ID редактируемого юзера }}>
<!-- список товаров -->
<input type=checkbox name="products[]" value={{ ID товара }}>
<input type=checkbox name="products[]" value={{ ID товара }}>
<input type=checkbox name="products[]" value={{ ID товара }}>


И тогда при получении

$userId = $request->get('user_id');
$user = User::findOrFail($userId);
$products = $request->get('products', []);
$user->saveProducts($products);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы