<?php
namespace App\Http\Controllers\Api\V2;
use App\Models\Search;
use App\Models\Product;
use App\Models\Brand;
use App\Models\Shop;
use Illuminate\Http\Request;
class SearchSuggestionController extends Controller
{
public function getList(Request $request)
{
$query_key = $request->query_key;
$type = $request->type;
$search_query = Search::select('id', 'query', 'count');
if ($query_key != "") {
$search_query->where('query', 'like', "%{$query_key}%");
}
$searches = $search_query->orderBy('count', 'desc')->limit(10)->get();
if ($type == "product") {
$product_query = Product::query();
if ($query_key != "") {
$product_query->where(function ($query) use ($query_key) {
foreach (explode(' ', trim($query_key)) as $word) {
$query->where('name', 'like', '%'.$word.'%')->orWhere('tags', 'like', '%'.$word.'%')->orWhereHas('product_translations', function($query) use ($word){
$query->where('name', 'like', '%'.$word.'%');
});
}
});
}
$products = filter_products($product_query)->limit(3)->get();
}
if ($type == "brands") {
$brand_query = Brand::query();
if ($query_key != "") {
$brand_query->where('name', 'like', "%$query_key%");
}
$brands = $brand_query->limit(3)->get();
}
if ($type == "sellers") {
$shop_query = Shop::query();
if ($query_key != "") {
$shop_query->where('name', 'like', "%$query_key%");
}
$shops = $shop_query->limit(3)->get();
}
$items = [];
//shop push
if ($type == "sellers" && !empty($shops)) {
foreach ($shops as $shop) {
$item = [];
$item['id'] = $shop->id;
$item['query'] = $shop->name;
$item['count'] = 0;
$item['type'] = "shop";
$item['type_string'] = "Shop";
$items[] = $item;
}
}
//brand push
if ($type == "brands" && !empty($brands)) {
foreach ($brands as $brand) {
$item = [];
$item['id'] = $brand->id;
$item['query'] = $brand->name;
$item['count'] = 0;
$item['type'] = "brand";
$item['type_string'] = "Brand";
$items[] = $item;
}
}
//product push
if ($type == "product" && !empty($products)) {
foreach ($products as $product) {
$item = [];
$item['id'] = $product->id;
$item['query'] = $product->name;
$item['count'] = 0;
$item['type'] = "product";
$item['type_string'] = "Product";
$items[] = $item;
}
}
//search push
if (!empty($searches)) {
foreach ($searches as $search) {
$item = [];
$item['id'] = $search->id;
$item['query'] = $search->query;
$item['count'] = intval($search->count);
$item['type'] = "search";
$item['type_string'] = "Search";
$items[] = $item;
}
}
return $items; // should return a valid json of search list;
}
}
|