Я пытаюсь сохранить значения своих флажков в базе данных. У меня есть эти три таблицы.
fields
id name
1 gender
2 looking_for
field_values (здесь field_id ссылается на id таблицы полей)
id field_id value label
1 1 1 Men
2 1 2 Women
3 2 3 Relationship
4 2 4 Friendship
5 2 5 Marriage
user_interests (здесь field_id ссылается на field_id таблицы field_values и value_id ссылается на значение в таблице field_values)
user_id field_id value_id
1 1 2
1 2 4
1 2 5
пол в блейде использует значения параметров, а Looking_for использует значения флажков. Я сделал одну функцию, которая пытается обновить их обоих. Я использую два предиката в своей функции, и я могу успешно обновить параметр пола, но я не могу обновить параметр Looking_for. Когда я нажимаю кнопку «Отправить», ничего не происходит, также, когда я сбрасываю что-то внутри этого foreach, которое должно обновлять флажки, оно не сбрасывает. Любая помощь очень ценится. Вот мой код.
web. php
Route::patch('profile/interests', 'UserProfileController@updateInterestsData')->name('profile.update.interests.data');
UserProfileController. php
public function updateInterestsData(UpdateInterestsDataRequest $request)
{
$user = User::with('userProfile')->where('id', Auth::user()->id)->firstOrFail();
$request->validated();
$userId = $request->input('user_id') ? $request->input('user_id') : Auth::user()->id;
$data = $request->all();
$options = [
'gender' => 1,
'looking_for' => 2
];
foreach ($options as $fieldName => $fieldId) {
if (! empty($data[$fieldName])) {
DB::table('user_interests')
->where('user_id', $userId)
->where('field_id', $fieldId)
->delete();
if (is_array($data[$fieldName])) { // CHECKBOX FIELDS AND HERE IT DOESN'T WORK!!!
//dd('DIE!!!!!!') IT DOESN'T ENTER HERE!!!
foreach ($data[$fieldName] as $key => $value) {
DB::table('user_interests')->insert([
'user_id' => $userId,
'field_id' => $fieldId,
'value_id' => $value
]);
}
} else { // SELECT FIELDS!!!
DB::table('user_interests')->insert([
'user_id' => $userId,
'field_id' => $fieldId,
'value_id' => $data[$fieldName]
]);
}
}
}
$user->userProfile->update(
[
'age_from_preference' => $request->age_from_preference,
'age_to_preference' => $request->age_to_preference,
'updated_at' => Carbon::now()
]
);
$request->user()->save();
return redirect()->route('profile.show', [$user->username]);
}
index.blade. php
<form action="{{ route('profile.update.interests.data') }}" method="POST" class="flex">
@method('PATCH')
@csrf
<div class="form-group">
<span>Interessiert an</span>
{{-- wrong value - selected --}}
@isset($options)
@foreach($options as $name => $fieldData)
@if ($name == 'gender')
<div class="selectHolder">
<select name="{{ $name }}">
<option selected="true" disabled="disabled" value="" style="display:none">bitte auswählen</option>
@foreach($fieldData['data'] as $value => $label)
<option value="{{ $value }}" {{ isset($data[$fieldData['label']['id']]) ? (in_array($value, $data[$fieldData['label']['id']]) ? 'selected' : '') : '' }}>
{{ $label }}
</option>
@endforeach
</select>
</div>
<?php
unset($options[$name]);
?>
@endif
@endforeach
@endisset
</div>
<div class="form-group">
<span>Im Alter von</span>
<input type="text" placeholder="XX" maxlength="2" value="{{ $userForShowProfile->userProfile->age_from_preference ?? "" }}" name="age_from_preference">
<span>Jahren bis</span>
<input type="text" placeholder="XX" maxlength="2" value="{{ $userForShowProfile->userProfile->age_to_preference ?? "" }}" name="age_to_preference">
<span>Jahren</span>
</div>
{{-- wrong value - checked --}}
@isset($options)
<div class="form-group flex mt-5">
@foreach($options as $name => $fieldData)
@if ($name == 'looking_for')
@foreach ($options[$name]['data'] as $value=>$label)
<div class="interestedIn">
<input type="checkbox" name="{{ $name.'-'.$value }}" value="{{ $value }}" {{ isset($data[$fieldData['label']['id']]) ? (in_array($value, $data[$fieldData['label']['id']]) ? 'checked' : null) : '' }}>
<label for="{{$name}}-{{ $value }}">{{ $label }}</label>
</div>
@endforeach
@endif
@endforeach
</div>
@endisset
<div class="form-group">
<label for="" class="textBold">Button</label>
<input type="submit" class="form-control" name="submit" value="BUTTON">
</div>
</form>
код переменной $ options
public static function getProfileLookingForDisplayOptions()
{
$options = [
'gender' => ['id' => 1, 'label' => "Interessiert an"],
'looking_for' => ['id' => 2, 'label' => ""]
];
$data_options = [];
foreach ($options as $field => $value) {
$data_options[$field]['data'] = Value::fieldValues($field);
$data_options[$field]['label'] = $options[$field];
if (!in_array($field, ['gender', 'looking_for'])) {
$data_options[$field]['data'][100] = "Doesn't matter";
}
}
//dd($data_options);
return $data_options;
}