Laravel - проверить, существуют ли данные в базе данных в пределах javascript - PullRequest
0 голосов
/ 13 июля 2020

Я создаю форму с помощью Laravel 7. Во-первых, пользователям нужно выбрать один из элементов в поле ввода с помощью списка данных, и соответствующая подробная информация будет отображаться после выбора («размыть» поле ввода). Пользователи также могут добавлять в список свои собственные элементы. База данных используется для хранения всех элементов, если пользователь добавляет настроенный, он будет сохранен в базе данных, чтобы он был показан. Итак, поскольку это поле ввода, пользователь может печатать. Я хочу, чтобы он не отображал никакой информации, если ввод не существует в базе данных, пока пользователь не нажмет кнопку добавления, чтобы добавить настроенный элемент в базу данных, а также раскрывающийся список ввода, тогда будет показана информация по умолчанию.

Но как определить, существует ли ввод в базе данных?

Форма такая, я использую Jquery, чтобы скрыть / показать div, на каком элементе выбран.

<form action"/send" method="post">
  <div id="info1">
    <!-- info about first item -->    
  </div>

  <div id="info2">
    <!-- info about second item -->
  </div>

  <div id="info_default">
    <!-- if customised item is chosen, show this one -->  
  </div>

  <div id="info_does_not_exist">
    <!-- if cannot find the input item in database, show this one -->  
  </div>

  <button type="submit">submit</button>
</form>

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Для простого подхода я рекомендую вам использовать Ajax из jQuery, при этом вам не нужно слишком много менять, добавить еще один маршрут для API, проверку данных в базе данных и несколько JavaScript строк код. Вы можете попробовать следующий способ:

Контроллер :

use Your\Namespace\Path\Of\Model Model
Class ABC {
    ...
    public function checkExist(){
        $data = request()->get('data'); // get data to check
        $model = new Model();
        $where = ['id' => $data]; // passing your where condition to check
        return $model->where($where)->get()->count() > 0;
    }
}

Файл маршрута (web.php / api. php):

Route :: get ('checkExist', 'ABC@checkExist');

Просмотр

<form action"/send" method="post">
  <div id="info1">
    <!-- info about first item -->    
  </div>

  <div id="info2">
    <!-- info about second item -->
  </div>

  <div id="info_default">
    <!-- if customised item is chosen, show this one -->  
  </div>

  <div id="info_does_not_exist">
    <!-- if cannot find the input item in database, show this one -->  
  </div>

  <button type="submit">submit</button>
</form>
...
<script>
  $(function(){
    // every time input change, check value existence in database
    $('.info2 input').change(function(){
      let input_value = $(this).val();
      $.ajax({
        url: "{{ route('checkExist') }}",
        method: "GET",
        data: {"id": input_value},
        success: function(response){
          // process if/else to show div '.info_default' / '.info_does_not_exist'
          if (response) {
            // show '.info_default' and hide '.info_does_not_exist'
          } else {
            // show '.info_does_not_exist' and hide '.info_default'
          }
        }
      });
    })
  })
</script>

Это не настоящий исполняемый код , просто идея, по этому вы можете настроить ее в зависимости от вашего дальнейшего желания. Надеюсь, это поможет

1 голос
/ 13 июля 2020

Вы должны использовать что-то вроде AJAX, чтобы проверить свою базу данных на значение, введенное пользователем, а затем принять правильное решение не отображать ничего, пока не добавите или не отобразите то, что находится в базе данных.

, чтобы рабочий процесс был следующим : ввод пользователя => ajax принять ввод пользователя и передать его в функцию контроллера для проверки наличия значения в базе данных => в зависимости от возвращаемого значения из этой функции контроллера => отобразить правильное значение для пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...