Page 1 sur 1

CRUD Ajax : valeur du dropdown enregistrée dans la table, mais non retournée lorsque le CRUD est éditée

Posté : 10 mars 2021, 10:39
par Marc_Q
Bonjour,

Je rencontre une erreur que je n'arrive pas à résoudre depuis 2 jours :

J'ai créé un CRUD ajax qui contient, entre autres, 2 dropdowns :

un pour sélectionner le motif du meeting
("TYPE" dans datatable et "request_type_id" dans la table),

le second le statut du meeting
("STATUS" dans datatable et "status_id" dans table).

Le premier dropdown enregistre une nouvelle valeur, met à jour une valeur sélectionnée dans la table de la BDD et édite la valeur sélectionnée et enregistrée dans la table de la BDD sans aucun problème.

Le second dropdown enregistre une nouvelle valeur dans la table de la BDD, mais lorsque j'édite le formulaire, il ne me restitue pas la valeur de la table de la base de données.

Le hic, c'est que j'utilise

1. le même type de relation "belongsTo & hasMany" entre les modèles "Meeting" et "MeetingRequestType" pour le premier dropdown qui fonctionne que le second entre les modèles "Meeting" et "StatusMeeting"

Pour le premier dropdown :

Modèle "Meeting"
public function meetingrequesttype()
{
return $this->belongsTo('App\MeetingRequestType','id');
}
Modèle "MeetingRequestType"
public function state()
{
return $this->belongsTo('App\MeetingState','id');
}
Pour le second dropdown :

Modèle "Meeting"
public function state()
{
return $this->belongsTo('App\MeetingState','id');
}
Modèle "StatusMeeting"
public function meetings()
{
return $this->hasMany('App\Meeting', 'status_id');
}
2. Le même code HTML (adapte naturellement à la colonne et aux modèles) :

HTML :

Premier dropdown :
<div class="form-group">
<label for="request_type_id" class="col-form-label">{{ __('Meeting Request') }}</label>
<select class="selectpicker col-sm-12 pl-0 pr-0" name="request_type_id" id="request_type_id" data-style="select-with-transition" title="" data-size="100">
@foreach ($meetings as $meeting)
<option value="{{$meeting->request_type_id}}">{{ __('Select Meeting Request Type') }}</option>
@foreach ($meetingrequesttypes as $meetingrequesttype)
@php $selected = $meetingrequesttype->id == $meeting->request_type_id ? 'selected="selected"' : '' @endphp
@if($meetingrequesttype->id && $meetingrequesttype->disabled == 0)
<option value="{{ $meetingrequesttype->id }}" {{$selected}} >{{ $meetingrequesttype->type }}</option>
@endif
@endforeach
@endforeach
</select>
</div>
Seconddropdown :
<div class="form-group">
<label for="status_id" class="col-form-label">{{ __('Meeting Status') }}</label>
<select class="selectpicker col-sm-12 pl-0 pr-0" name="status_id" id="status_id" data-style="select-with-transition" title="" data-size="100">
@foreach ($meetings as $meeting)
<option value="{{$meeting->status_id}}">{{ __('Select Meeting Status') }}</option>
@foreach ($meetingstatuses as $meetingstatus)
@php $selected = $meetingstatus->id == $meeting->status_id ? 'selected="selected"' : '' @endphp
@if($meetingstatus->id && $meetingstatus->disabled == 0)
<option value="{{ $meetingstatus->id }}" {{$selected}} >{{ $meetingstatus->status }}</option>
@endif
@endforeach
@endforeach
</select>
</div>
Ci-après le code jQuery en fin de fichier blade :
$(document).on('click', '.edit-admin-meeting.edit', function () {

// alert($(this).attr('id'));
var id = $(this).attr('id');
$('#form_output_admin_meeting').html('');
$.ajax({
url: "/files/" + id + "/edit-admin-meeting",
dataType: "json",
success: function (html) {
console.log(html);
$('#admin_meeting_id').val(html.data.id);
$('#adminMeetingModal .meeting-pdf').attr('href', '{{URL::to('files')}}/' + html.data.id + '/createMeetingPDF');
$('#request_type_id').val(html.data.request_type_id); // relatif au premier dropdown
$('#status_id').val(html.data.status_id); // relatif au second dropdown
$('#location').val(html.data.location);
$('#meeting_date').val(html.data.meeting_date);
$('#from_time').val(html.data.from_time);
$('#to_time').val(html.data.to_time);
$('#message').val(html.data.message);
$('#visit_report').val(html.data.visit_report);
$('#decisions').val(html.data.decisions);
$('#hidden_id').val(html.data.id);
$('.modal-title-admin-meeting').text("Edit Meeting Request"); // TODO MQ : Translate
$('#button_action_admin_meeting').val("Edit"); // TODO MQ : Translate
$('#action_admin_meeting').val("Update"); // TODO MQ : Translate
$('#adminMeetingModal').modal('show');
}

})

});
Table Base de donnees

Premier dropdown :
request_type_id int

Second dropdown :
status_id int


Pour illuster cela, une petite vidéo, merci de cliquer sur le lien :

https://www.screencast.com/t/I8VXIer4

La datatable Meeting contient 1 record dont la valeur enregistrée
1. pour le premier dropdown est : 3 (correspond a "Other request") dans la colonne "TYPE" de la datatable
2. pour le second : 3 (correspond a "Postponed") dans la colonne "STATUS" de la datatable

J'édite le record et je modifie les valeurs :
1. du premier a "Ongoing File Review" qui correspond a l'ID 2)
2. du second a "Accepted" qui correspond également a l'ID 2)
J'update, le formulaire se referme.

Lorsque j'édite à nouveau le formulaire, sans rafraîchir l'écran, les bonnes valeurs sont conservées et retournent donc bien les valeurs enregistrées dans la table de la BDD.

Par contre, lorsque je rafraîchis mon formulaire, seule la bonne valeur du premier dropdown est retournée (correspondant a l'ID enregistrée dans la table).

J'ai tout essayé, mais là j'ai besoin d'un regard extérieure, car avec le nez dans le guidon, je ne vois peut être pas une erreur triviale.

Merci d'avance.