Обновление сводной таблицы с флажком - PullRequest
0 голосов
/ 06 июля 2019

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

Модель пользователя:

public function services(){
        return $this->belongsToMany(Service::class);
    }

Модель обслуживания:

public function user(){
        return $this->belongsToMany(User::class);
    }

Мой код в функции магазина в ProfileController:

$user = Auth::user();
    if(isset($request->services)){
                foreach($request->services as $service_id){
                    $service=Service::find($service_id);
                    $service->user()->syncWithoutDetaching($user->id);
                }
        }

Blade:

<div class="form-group row">
        <label class="col-md-4 col-form-label text-md-right">Type de services</label>

            <label for="peinture">Peinture</label>
            <input type="checkbox" id="peinture" name="services[]" value="1" 
            <?php if (in_array(1, $services->toArray())) echo "checked" ?> >

            <label for="neige">Déneigement</label>
            <input type="checkbox" id="neige" name="services[]" value="2"
            <?php if (in_array(2, $services->toArray())) echo "checked" ?> >

            <label for="gardiennage">Gardiennage</label>
            <input type="checkbox" id="gardiennage" name="services[]" value="3"
            <?php if (in_array(3, $services->toArray())) echo "checked" ?> >

            <label for="entretien">Entretien paysager</label>
            <input type="checkbox" id="entretien" name="services[]" value="4"
            <?php if (in_array(4, $services->toArray())) echo "checked" ?> >
    </div>

Если я сделаю dd ($ request);все кажется в этом.Понятия не имею, что я делаю не так, спасибо за любую помощь.

1 Ответ

2 голосов
/ 06 июля 2019

вам не нужно перебирать сервисы в вашем контроллере.просто сделайте это:

$user = Auth::user();
$user->services()->sync($request->services);

это сначала очистит сводную таблицу, а затем присоединит новые значения сразу.

я действительно призываю вас не использовать значения $ request без проверки их,в этом случае запустите это перед началом синхронизации сводной таблицы:

$this->validate($request, [
    'services' => 'required|array',
    'services.*' => 'exists:services,id',
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...