Edit File: HomeCategoriesResource.php
<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Facades\DB; use App\Models\Setting; use App\Models\Store; class HomeCategoriesResource extends JsonResource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { $lat = doubleval($request['lat']) ?? doubleval(23.8859); $long = doubleval($request['long']) ?? doubleval(45.0792); $settings = Setting::all()->pluck('value', 'key'); $max_distance = (int) $settings['distance']; $stores = Store::select("stores.*" , DB::raw("6371 * acos(cos(radians(" . $lat . ")) * cos(radians(stores.lat)) * cos(radians(stores.long) - radians(" . $long . ")) + sin(radians(" . $lat . ")) * sin(radians(stores.lat))) AS distance")) ->having("distance", '<', $max_distance) ->where('stores.deleted_at', null) ->whereHas('products') ->where(function ($query) use ($request) { if ($request['search']) { $query->where('stores.name->ar', 'like', '%' . $request['search'] . '%'); $query->orWhere('stores.name->en', 'like', '%' . $request['search'] . '%'); } }) ->where('category' , $this->slug) ->whereHas('user', function($q) { $q->where('approve', 'accept') ->where('status' , '!=' , 'block'); }) ->orderBy('distance', 'asc') ->groupBy("stores.name") ->limit(10) ->get(); return [ 'id' => $this->id, 'name' => $this->name ?? '', 'slug' => $this->slug ?? '', 'image' => $this->image ? $this->ImagePath : '', 'subcategories' => SubcategoriesResource::collection($this->subcategories()->get()), 'stores' => StoresResource::collection($stores) , ]; } }
Back to File Manager