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

Posted

技术标签:

【中文标题】具有多个模型的 Laravel ajax 实时搜索查询【英文标题】:Laravel ajax live search query with multiple models 【发布时间】:2018-10-17 00:59:54 【问题描述】:

目前我正在尝试制作实时搜索字段。当用户开始输入时,结果将出现在文本输入字段下方。对于一个模型它完美地工作。但是如果我想在多个模型中搜索无法显示任何结果。

这就是我到目前为止所做的。这适用于一个模型。

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;

如果有人帮忙,我会很高兴。我现在什么都做不了。我只想在多个模型中搜索,就像在一个模型中搜索一样。

这也是我的 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,
    );
);

查看:

<form action="#">
   <i class="fa fa-search c-gray-1-dark f-27 pl-10px"></i>
   <input type="text" name="search_text"  id="search_text" value=" old('title') " />
</form>

【问题讨论】:

toArray 将结果转换为数组,因此$results-&gt;title 将不再起作用,因为它适用于对象。你应该使用$results["title"] 【参考方案1】:

对于合并结果,你可以试试这个

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'=>''];

希望这会对你有所帮助。

【讨论】:

我还有第二个问题。我需要让这个结果可点击吗?有什么建议吗? 是的。那么你是如何展示结果的呢?请告诉我查看页面代码。 抱歉,搜索后我看不到您在哪里定义了结果。 当我刚开始在输入文本表单中输入时,结果会出现在文本字段下。我只是想让这个结果可以点击。 所以你可以尝试锚标签代替输入标签。

以上是关于具有多个模型的 Laravel ajax 实时搜索查询的主要内容,如果未能解决你的问题,请参考以下文章

具有多个输入的 Ajax 实时搜索

php 使用实时结果查看Laravel搜索文件:https://www.cloudways.com/blog/live-search-laravel-ajax/

如何使用 jQuery ajax 实时搜索 Django 中的模型?

在 laravel 中搜索自动完成 ajax

PHP 实例 - AJAX 实时搜索

具有实时和 WebSockets 的 Angular2 + Laravel