如何在 Laravel 5.7 中将多个数据库数据传递到 jQuery 的自动完成(AJAX)中

Posted

技术标签:

【中文标题】如何在 Laravel 5.7 中将多个数据库数据传递到 jQuery 的自动完成(AJAX)中【英文标题】:How to pass multiple DB data into jQuery's Autocomplete (AJAX) in Laravel 5.7 【发布时间】:2019-04-22 10:26:15 【问题描述】:

我正在使用 jQuery 的自动完成功能 在用户键入时获取数据。有用;我得到了一些与用户输入相匹配的 zipcode

问题是我想传递的不仅仅是邮政编码,比如与该邮政编码相关联的社区。​​strong> 两者都在同一张表中

我想在自动完成中传递邮政编码和邻居。

控制器

<?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');

【问题讨论】:

您的意思是要将街区附加到邮政编码中吗?在您的$results 中,您可以这样做:'value' =&gt; $query-&gt;postal_code . ' ' . $query-&gt;neighborhood, @newUserName02 有效。谢谢。问题:那么我可以这样附加任意数量的数据吗?。另外,请回答问题,以便我将您选为获胜者! 【参考方案1】:

您可以在字符串之间使用. 将字符串连接在一起。在您的 $results 变量中:

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

您可以通过这种方式将任意数量的字符串连接在一起:

$query->postal_code . ' ' . $query->neighborhood . ' (' . $query->foo . ') ' . $query->bar

【讨论】:

【参考方案2】:

如果您想保留 php 中的数组值,您可以使用自动完成的 _renderItem 方法,如 here 所示。

所以你的代码应该是这样的:

$('.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 );
;

然后您可以使用该值并更改所选项目的外观。

【讨论】:

以上是关于如何在 Laravel 5.7 中将多个数据库数据传递到 jQuery 的自动完成(AJAX)中的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中将多个数据插入数据库

Laravel 5.7 - 如何使用 axios.get 从 API 检索数据?

如何在 Laravel 中将多个数组/变量传递给 DOMPDF?

laravel 5.7 中的多个文件上传问题

如何在laravel中将用户帖子保存在数据库中?

Laravel 5.7 执行 SQL 查询多少次?