Estoy tratando de obtener datos para autocompletar usando laravel.
Controlador:
public function collection_search(Request $request) { $term = $request->search; $serveurapObj = new Serveurap(); $result = $serveurapObj->collectionAutocomplete(); return response()->json($result); }Modelo:
public function collectionAutocomplete($term) { $where= ['m.supprime'=>'0', 's.supprime'=>'0']; return DB::table('serveuraps AS s') ->select(DB::raw('s.nom as hostname')) ->join('machines AS m','m.id','=','s.machine_id') ->join('typeserveurs AS t','t.id','=','m.typeserveur_id') ->where($where) ->where('hostname','like','%'.$term.'%') ->get(); }Vista:
<div class="col-md-12"> <div class="form-group"> <label class="col-md-3 control-label">{!! __('script.serveur') !!}</label> <div class="col-md-4"> <input class="form-control" type="text" name="serveur" id="relance-serveur" role="textbox" aria-autocomplete="list" aria-haspopup="true"> </div> </div> </div>Jquery/Ajax:
$(document).ready(function () { // relance serveur autocomplete textbox $('#relance-serveur').autocomplete({ source: function (request, response) { alert(request.term) $.ajax({ url: '/scripts/relanceCollection/collection', dataType: 'json', data: { search: request.term }, success: function (data) { response(data); } }); }, }); }); Recibo un error al acceder a la search desde js en el controlador.
Error: 
Imprimí $request pero mostró los datos json del modelo. ¿Cómo obtendría la search de js al controlador para poder buscar datos en función de ese término?
La clave que está enviando es search , no term . Cambie el código de su controlador para reflejar eso, o cambie los datos de ajax.
$.ajax({ ... data: { → search: request.term }, ... }); public function collection_search(Request $request) { $term = $request->search; ← ... } $.ajax({ ... data: { → term: request.term }, ... }); public function collection_search(Request $request) { $term = $request->term; ← ... }Has asignado un alias a la clase equivocada. No querrás una instancia de Facade, nunca. Si desea una instancia de algo, desea la instancia subyacente, no la fachada.
use Illuminate\Http\Request; Ahora, $request sería una instancia de esa clase y no de Facade, Illuminate\Support\Facades\Request .
Obtuve el resultado al agregar la función $.map en la función de éxito en JS. si alguien lo necesita, consulte el siguiente código js:
$(document).ready(function () { var headers = { 'X-CSRF-TOKEN':'<meta name="csrf-token" content="{{ csrf_token() }}">' }; // relance serveur autocomplete textbox $('#relance-serveur').autocomplete({ source: function (request, response) { $.ajax({ url: '/scripts/relanceCollection/collection', data: { term: request.term }, headers: headers, dataType: 'json', success: function (data) { response($.map(data, function (item) { return { label: item.hostname, value: item.hostname }; })); } }); }, select: function (event, ui) { $('#relance-serveur').val(ui.item.label); // display the selected text return false; }, minLength: 1 }); });