Как передать несколько данных БД в автозаполнение jQuery (AJAX) в Laravel 5.7 - PullRequest
0 голосов
/ 20 ноября 2018

Я использую Автозаполнение jQuery , чтобы получать данные, пока пользователь печатает. Оно работает; Я получаю почтовый индекс , который соответствует вводу пользователя.

Дело в том, что Я хочу передать больше, чем почтовый индекс, например, район, связанный с этим почтовым индексом. Оба находятся в одной таблице .

Я хочу передать почтовый индекс И окрестности в автозаполнении.

enter image description here

Контроллер

<?php

namespace Grupo_Villanueva\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Response;

class SearchController extends Controller
{
    public function buscarCp(Request $request)
    {

        $term = $request->input('term');

        $results = [];

        $queries = DB::connection('db_postalcodes')
            ->table('postal_code')
            ->where('postal_code', 'LIKE', '%' . $term . '%') //search 'postal_code' column
            ->take(10)
            ->get(); // get 5 results

        foreach ($queries as $query) {
            $results[] = [
                'postal_code' => $query->postal_code,
                'value' => $query->postal_code,
                'colonia' => $query->neighborhood];
        }

        return Response::json($results);
    }
}

Я думал о том, чтобы извлечь его с colonia внутри ассоциативного массива, хотя я не эксперт.

JS:

@if (Request::is('admin/posts/create'))
{{-- <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script> --}}
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
    $('.postalCode').autocomplete({
        source: "{{ route('busqueda-cp') }}",
        minLength: 3,
        select: function (event, ui) {
            $('#postalCode').val(ui.item.value);
        }
    });
</script>
@else
<!-- No se cargó select2-->
@endif

Маршрут:

// Aquí se guarda la función que hace, vía ajax, búsqueda de código postal.
Route::get('/buscarCp', 'SearchController@buscarCp')->name('busqueda-cp');

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Если вы хотите сохранить значение массива от php, вы можете использовать метод _renderItem автозаполнения, как показано здесь .

Итак, ваш код будет выглядеть так:

$('.postalCode').autocomplete({
    source: "{{ route('busqueda-cp') }}",
    minLength: 3,
    select: function (event, ui) {
        $('#postalCode').val(ui.item.value);
    }
}).autocomplete( "instance" )._renderItem = function( ul, item ) {
  return $( "<li>" )
    .append( item.postal_code + " " + item.colonia )
    .appendTo( ul );
};

Тогда вы можете использовать значение и просто изменить внешний вид выбранных элементов.

0 голосов
/ 20 ноября 2018

Вы можете объединить строки, используя . между строками.В вашей переменной $results:

'value' => $query->postal_code . ' ' . $query->neighborhood,

Вы можете объединить любое количество строк следующим образом:

$query->postal_code . ' ' . $query->neighborhood . ' (' . $query->foo . ') ' . $query->bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...