Arrays 具有多个模型的Laravel ajax实时搜索查询

Arrays 具有多个模型的Laravel ajax实时搜索查询,arrays,ajax,laravel,search,model,Arrays,Ajax,Laravel,Search,Model,目前我正在努力使现场搜索领域。当用户开始键入时,结果将显示在文本输入字段下。对于一个模型来说,它工作得非常好。但如果我想在多个模型中搜索,则无法显示任何结果 这就是我到目前为止所做的。这对一个模型有效 public function autoComplete(Request $request) { $query = $request->get('term',''); $news=News::where('title','LIKE','%'.$query.'%')->

目前我正在努力使现场搜索领域。当用户开始键入时,结果将显示在文本输入字段下。对于一个模型来说,它工作得非常好。但如果我想在多个模型中搜索,则无法显示任何结果

这就是我到目前为止所做的。这对一个模型有效

public function autoComplete(Request $request) {
    $query = $request->get('term','');

    $news=News::where('title','LIKE','%'.$query.'%')->get();

    $data=array();
    foreach ($news as $new) {
        $data[]=array('value'=>$new->title,'id'=>$new->id);
    }
    if(count($data))
        return $data;
    else
        return ['value'=>'No Result Found','id'=>''];
}
但事实并非如此

public function autoComplete(Request $request) {
    $query = $request->get('term','');

    $news=News::where('title','LIKE','%'.$query.'%')->get();
    $products=Product::where('title', 'LIKE', '%'.$query.'%')->get();
    $searchResults = array_merge($news->toArray(), $products->toArray());

    $data=array();
    foreach ($searchResults as $results) {
        $data[]=array('value'=>$results->title,'id'=>$results->id);
    }
    if(count($data))
        return $data;
    else
        return ['value'=>'No Result Found','id'=>''];
}
而且这也不起作用

    $news = News::orderBy('order', 'asc')->get();
    $products= Product::orderBy('order', 'asc')->get();
    $results = array();
    $results['products'] = $sliders;
    $results['news'] = $news;
如果有人帮忙,我会很高兴的。我现在什么都做不了。我只想在多个模型中搜索,就像只在一个模型中搜索一样

public function autoComplete(Request $request) {
    $query = $request->get('term','');

    $news=News::where('title','LIKE','%'.$query.'%')->get();

    $data=array();
    foreach ($news as $new) {
        $data[]=array('value'=>$new->title,'id'=>$new->id);
    }
    if(count($data))
        return $data;
    else
        return ['value'=>'No Result Found','id'=>''];
}
这也是我的javascript代码

<script>
$(document).ready(function() {
    src = "{{ route('searchajax') }}";
    $("#search_text").autocomplete({
        source: function(request, response) {
            $.ajax({
                url: src,
                dataType: "json",
                data: {
                    term : request.term
                },
                success: function(data) {
                    response(data);
                    for (var i=0; i<data.length; i++) {
                        console.log(data[i]['value']);}
                }
            });
        },
        minLength: 2,
    });
});

$(文档).ready(函数(){
src=“{route('searchajax')}}”;
$(“#搜索_文本”)。自动完成({
来源:功能(请求、响应){
$.ajax({
网址:src,
数据类型:“json”,
数据:{
期限:request.term
},
成功:功能(数据){
答复(数据);

对于(var i=0;i对于合并结果,您可以尝试以下方法

public function autoComplete(Request $request) {
    $query = $request->get('term','');

    $news=News::where('title','LIKE','%'.$query.'%')->get();
    $products=Product::where('title', 'LIKE', '%'.$query.'%')->get();

    $searchResults = $news->merge($products);

    $data=array();
    foreach ($searchResults as $results) {
        $data[]=array('value'=>$results->title,'id'=>$results->id);
    }
    if(count($data))
        return $data;
    else
        return ['value'=>'No Result Found','id'=>''];
}

希望这能对您有所帮助。

toArray
将结果转换为数组,这样
$results->title
就不能再工作了,因为它可以在对象上工作。您应该使用
$results[“title”]
我还有第二个问题。我需要使此结果可单击?对此有什么建议吗?是的。那么您是如何显示结果的?请向我显示查看页面代码。抱歉,但我看不到您在搜索后在何处定义了结果。当我刚开始键入输入文本表单时,结果会显示在文本字段下。我只想这样做结果可点击。所以你可以尝试锚定标签代替输入标签。