Laravel проблема с пустым массивом - PullRequest
0 голосов
/ 04 августа 2020

У меня проблема, когда я отправляю данные формы и отображаю их в другом представлении, я получаю все данные, кроме типа данных массива ($mat_res), вот мой код:

Просмотр:

            var mat_codes = [];
            ...
            console.log(mat_codes);//displays an array with data
            $('#rest_form').on('submit', function(event) {
                //event.preventDefault();
                var form_data = $(this).serialize();                    
                var personnel = $('#personnel').val();
                var fonction = $('#fonction').val();
                var service = $('#service').val();
                var user_id = $('#user_id').val();
                var remarque = $('#remarque').val();
                $.ajax({
                    url: "{{ route('Restituter.createRest') }}",
                    method: "POST",
                    data: {
                        mat_codes: mat_codes,
                        personnel: personnel,
                        fonction: fonction,
                        remarque: remarque,
                        user_id: user_id
                    },                        
                    success: function(data) {
                        mat_codes = [];
                        $('#rest_form')[0].reset();
                    }
                });                   
            });

Контроллер:

public function createRest(Request $request) {
        ...
        $mat_res = array();
        for ($i = 0; $i < count($request->mat_codes); $i++) {
                    if(($request->mat_codes)[$i] != "") {
                        Restitution::firstOrCreate(['mat_code' => ($request->mat_codes)[$i], 'personnel_id' => $personnel->id], ['mat_code' => ($request->mat_codes)[$i], 'personnel_id' => $personnel->id, 'num' => $num, 'mois' => date('m'), 'restitution_code' => $num . "/" . date('m') . "/" . date("Y"), 'user_id' => $request->user_id]);
                        Materiel::where('mat_code', '=', ($request->mat_codes)[$i])->update(array('mat_etat' => 2));
                        $mat_res[$i] = DB::table('Materiels')->join('Types', 'Materiels.type_id', '=', 'Types.type_id')->select('Types.type_designation', 'Materiels.mat_designation', 'Materiels.mat_description', 'Materiels.mat_ns', 'Materiels.note')->where('mat_code', ($request->mat_codes)[$i])->first();
                    }
                }
        ...
        return view('Restitution', compact('nom', 'fonction', 'imei1', 'imei2', 'remarque', 'rest_code'), ['mat_res' => $mat_res]);
}

Второй вид:

@foreach($mat_res as $mat_res)
 ...
    <td>{{$mat_res->type_designation}}</td>
 ...
@endforeach

1 Ответ

0 голосов
/ 07 августа 2020

Это должно сработать. Объявите mat_codes внутри события отправки:

    $('#rest_form').on('submit', function(event) {
        //event.preventDefault();
        var mat_codes = [];
        ... //this is where you populate mat_codes
        var form_data = $(this).serialize();  //you can drop this line, you don't use it                  
        var personnel = $('#personnel').val();
        var fonction = $('#fonction').val();
        var service = $('#service').val();
        var user_id = $('#user_id').val();
        var remarque = $('#remarque').val();
        $.ajax({
            url: "{{ route('Restituter.createRest') }}",
            method: "POST",
            data: { mat_codes, personnel, fonction, remarque, user_id },
            success: function(data) {
                console.log(data); //this is coming from you controller
                mat_codes = [];
                $('#rest_form')[0].reset();
            }
        });                   
    });

В качестве дополнительного примечания, поскольку вы используете ES2015 вместо personnel: personnel, просто добавьте personal, fonction, ... к объекту данных, когда ключ и значение являются тем же. jQuery точно знает, что это означает.

...