Как избежать добавления того же элемента / продукта / строки в Datatable - PullRequest
0 голосов
/ 06 ноября 2018

Как показано на рисунке ниже, я использую Datatable для вывода списка продуктов и количественных данных, введенных пользователем.

table

Но я хочу ограничить добавление одного и того же элемента более одного раза. Я использую Ajax для получения данных из базы данных и метод Datatable draw () для создания таблицы выше. Как видно, есть две записи с одинаковым идентификатором или именем MAterial. Как я могу избежать этой проблемы?

  mat_req_table.row.add( {
 "mat_id": response.id,
 "name":  response.name,
 "quantity":check,
 "action": '<button id="edit" class="btn btn-info btn-sm"><i class="far fa-edit"></i></button> <button id="remove" class="btn btn-danger btn-sm"><i class="far fa-trash-alt"></i></button>',

 } ).draw();

Так я заполняю DataTable

$('#add').click(function(){
            if( $('#materialselect').val() != ''){
                var check = $('#quantity').val();
                var params = {
                    key1: $('#materialselect').val(),
                    key2: $('#quantity').val(),
                };
                $.ajax({
                    url: BASE + 'materialrequest/add',
                    type: 'POST',
                    dataType: 'JSON',
                    data: $.param(params),
                    success: function (response) {
                        var max =(response['high_bulk']);
                        if(check > max){
                            alert('amount you request can not be exceed total stock amount');
                            $('#quantity').val('');
                        }else{
                            mat_req_table.row.add( {

                                "mat_id": response.id,
                                "name":  response.name,
                                "quantity":check,
                                "action": '<button id="edit" class="btn btn-info btn-sm"><i class="far fa-edit"></i></button> <button id="remove" class="btn btn-danger btn-sm"><i class="far fa-trash-alt"></i></button>',

                            } ).draw();
                            $('#materialselect').val('');
                            $('#quantity').val('');
                        }


                    }
                });
                return false;
            }else{
                alert('please select material');
            }

        });

Серверная сторона

    public function add(Request $request)
{
    if($request->get('key2')){
        $key1 = $request->get('key1');
        $key2 = $request->get('key2');

        $material_name = $key1;
        $material = MaterialRegister::where('name',$material_name)->first();


        return response()->json(['name'=>$material->name,'id'=>$material->id,'high_bulk'=>$material->high_bulk]);

    }
}

Таблица объявлений

            var mat_req_table = $('#materialrequesttable').DataTable( {

            searching:false,
            paging:false,
            "ordering":false,
            bInfo:false,
            data:[],
            columns: [

            {data: 'mat_id', name: 'mat_id'},
            {data: 'name', name: 'name'},
            {data: 'quantity', name: 'quantity'},
            {data: 'action', name: 'action'},

            ]

        } );

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете рассмотреть пользовательский объект Запроса и перечислить поля и правила, которые вы хотите проверить.

https://laravel.com/docs/5.7/validation#form-request-validation

Вы можете использовать существующие правила проверки для этого. Так, например, для обеспечения уникальных идентификаторов материалов, для данной таблицы «Материал»:

function rules() {
  return [‘material_id’ => ‘exists:materials_table,id’];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...