Вы знаете, почему названия городов появляются дважды? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть входной поиск с использованием плагина автозаполнения, который показывает названия конференций и города, в которых они будут проводиться.Когда пользователь вводит 1 слово, результаты отображаются в автозаполнении.

Но есть проблема, например, если в таблице конференций есть две конференции с одинаковым столбцом города, например, "Ньюкасл" вВвод автозаполнения появляется "Newcastle" дважды.Но это должно появиться только один раз.Знаете ли вы, где проблема?

AutoCompleteController:

class AutocompleteController extends Controller
{
    public function index(){
    return view('autocomplete.index');
    }

    public function search(Request $request){
        $search = $request->term;
        $conferences = Conference::where('name', 'LIKE', '%'.$search.'%')->get();

        $cities = Conference::where('city', 'LIKE', '%'.$search.'%')->get();


        //dd($cities); 
        $data= [];
        foreach ($conferences as $key => $value){
            $data[] = ['category'=> 'Conferences', 'value' => $value->name, 'url' => 'conference/'.$value->id.'/'.$value->slug];
        }

        foreach ($cities as $key => $value){
            $data[] = ['category'=> 'Cities', 'value' => $value->city, 'url' => 'conferences/where/city/'.$value->city];
        }
        return response($data);
    }
}

Автозаполнение Jquery:

$.widget( "custom.catcomplete", $.ui.autocomplete, {
_create: function() {
    this._super();
    this.widget().menu( "option", "items", "> :not(.ui-autocomplete-category)" );
    },
    _renderMenu: function( ul, items ) {
    var that = this,
    currentCategory = "";
    $.each( items, function( index, item ) {
        var li;
        if ( item.category != currentCategory ) {
            ul.append( "<li class='ui-autocomplete-category bg bg-light-gray2 h6 font-weight-bold text-heading-blue'>"
            + item.category + "</li>" );
            currentCategory = item.category;
        }
        li = that._renderItemData( ul, item );
        if ( item.category ) {
        li.attr( "aria-label", item.category + " : " + item.label );
        }
    });
    }
});

$("#search").catcomplete({
    source: "{{ URL::to('autocomplete-search') }}",
    select: function(event, ui) {
    window.location.href = ui.item.url;
}

Когда набирается «New», dd ($ towns) показывает:

Collection {#274
#items: array:2 [
0 => Conference {#275
#fillable: array:18 [
0 => "name"
5 => "city"
...
]
#dates: array:2 [
0 => "start_date"
1 => "end_date"
]
#appends: array:1 [
0 => "price_range"
]
#connection: "mysql"
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:23 [
"id" => 1
"name" => "conf1"
"city" => "Newcastle"
]
#original: array:23 [
"id" => 1
"name" => "conf1"
"city" => "Newcastle"
]
#changes: []
#casts: []
#dateFormat: null
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [
0 => "*"
]
}
1 => Conference {#276
#fillable: array:18 [
0 => "name"
5 => "city"
...
]
#dates: array:2 [
0 => "start_date"
1 => "end_date"
]
#appends: array:1 [
0 => "price_range"
]
#connection: "mysql"
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:23 [
"id" => 2
"name" => "conf2"
"city" => "Newcastle"
...
]
#original: array:23 [
"id" => 2
"name" => "conf2"
"city" => "Newcastle"
...
]
#changes: []
#casts: []
#dateFormat: null
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [
0 => "*"
]
}
]
}

И это показывает без дд ($ городов):

[{category: "Cities", value: "Newcastle", url: "conferences/where/city/Newcastle"},…]
0
:
{category: "Cities", value: "Newcastle", url: "conferences/where/city/Newcastle"}
1
:
{category: "Cities", value: "Newcastle", url: "conferences/where/city/Newcastle"}

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать istdistinct () `следующим образом:

$cities = Conference::where('city', 'LIKE', '%'.$search.'%')-> distinct()->get(['city']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...