В таблице "categories" 6 записей. В таблице "services" 2 записи. bichon.shop/api/category-list (total_items: 6) всё работает, возвращает все 6 rзаписи из БД. НО bichon.shop/api/service-list (total_items: 0) ничего не возвращает... в чём тут может быть проблема? Подскажите куда копать. routes/api.php Код (Text): Route::get('category-list',[API\CategoryController::class,'getCategoryList']); Route::get('subcategory-list',[API\SubCategoryController::class,'getSubCategoryList']); Route::get('service-list',[API\ServiceController::class,'getServiceList']); Route::get('type-list',[API\CommanController::class,'getTypeList']); -bash-4.2$ php artisan route:list --method=GET --name=service показывает service.index service.create service.show service.edit bichon.shop/app/Http/Controllers/API/ServiceController.php PHP: use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\Service; use App\Models\Coupon; use App\Models\BookingRating; use App\Models\UserFavouriteService; use App\Models\ServiceFaq; use App\Http\Resources\API\ServiceResource; use App\Http\Resources\API\UserResource; use App\Http\Resources\API\ServiceDetailResource; use App\Http\Resources\API\BookingRatingResource; use App\Http\Resources\API\CouponResource; use App\Http\Resources\API\UserFavouriteResource; use App\Http\Resources\API\ProviderTaxResource; use App\Models\ProviderServiceAddressMapping; use App\Models\ProviderTaxMapping; class ServiceController extends Controller { public function getServiceList(Request $request){ $service = Service::with(['providers','category','serviceRating']); if($request->has('status') && isset($request->status)){ $service->where('status',$request->status); } if($request->has('provider_id')){ $service->where('provider_id',$request->provider_id); } if($request->has('category_id')){ $service->where('category_id',$request->category_id); } if($request->has('is_featured')){ $service->where('is_featured',$request->is_featured); } if($request->has('is_discount')){ $service->where('discount','>',0)->orderBy('discount','desc'); } if($request->has('is_rating') && $request->is_rating != ''){ $service->whereHas('serviceRating', function($q) use ($request) { $q->select('service_id',\DB::raw('round(AVG(rating),0) as total_rating'))->groupBy('service_id'); return $q; }); } if($request->has('is_price_min') && $request->is_price_min != '' || $request->has('is_price_max') && $request->is_price_max != ''){ $service->whereBetween('price', [$request->is_price_min, $request->is_price_max]); } if ($request->has('city_id')) { $service->whereHas('providers', function ($a) use ($request) { $a->where('city_id', $request->city_id); }); } if($request->has('provider_id') && $request->provider_id != '' ){ $service->whereHas('providers', function ($a) use ($request) { $a->where('status', 1); }); }else{ if(default_earning_type() === 'subscription'){ $service->whereHas('providers', function ($a) use ($request) { $a->where('status', 1)->where('is_subscribe',1); }); } } if ($request->has('latitude') && !empty($request->latitude) && $request->has('longitude') && !empty($request->longitude)) { $get_distance = getSettingKeyValue('DISTANCE','DISTANCE_RADIOUS'); $get_unit = getSettingKeyValue('DISTANCE','DISTANCE_TYPE'); $locations = $service->locationService($request->latitude,$request->longitude,$get_distance,$get_unit); $service_in_location = ProviderServiceAddressMapping::whereIn('provider_address_id',$locations)->get()->pluck('service_id'); $service->with('providerServiceAddress')->whereIn('id',$service_in_location); } if($request->has('search')){ $service->where('name','like',"%{$request->search}%"); } $per_page = config('constant.PER_PAGE_LIMIT'); if( $request->has('per_page') && !empty($request->per_page)){ if(is_numeric($request->per_page)){ $per_page = $request->per_page; } if($request->per_page === 'all' ){ $per_page = $service->count(); } } $service = $service->where('status',1)->orderBy('created_at','desc')->paginate($per_page); $items = ServiceResource::collection($service); $response = [ 'pagination' => [ 'total_items' => $items->total(), 'per_page' => $items->perPage(), 'currentPage' => $items->currentPage(), 'totalPages' => $items->lastPage(), 'from' => $items->firstItem(), 'to' => $items->lastItem(), 'next_page' => $items->nextPageUrl(), 'previous_page' => $items->previousPageUrl(), ], 'data' => $items, 'max'=> $service->max('price'), 'min'=> $service->min('price'), ]; return comman_custom_response($response); } ```
Дебаг панель стоит? Надо глянуть, что за запрос в итоге выполняется. Если это чистое апи, то я вот этим пользовался, правда, не с последними ларавелями. https://github.com/mlanin/laravel-api-debugger --- Добавлено --- Берёшь запрос, копируешь в какой-нибудь adminer, phpMyAdmin и прочие системы работы с СУБД, и смотришь, чего вернулось и почему.
а как в phpMyAdmin проверить? ещё пробовал в test.php писать код: Код (Text): $service = $service->where('status',1)->orderBy('created_at','desc')->paginate($per_page); dd($service); но выдал ошибку: Fatal error: Uncaught Error: Call to a member function where() on null in /var/www/u0635563/data/www/bichon.shop/public/test.php:3 Stack trace: #0 {main} thrown in /var/www/u0635563/data/www/bichon.shop/public/test.php on line 3
значить в $service пусто... после PHP: $service = Service::with(['providers','category','serviceRating']); вставьте dd($service );
а вставлять dd($service); надо прямо в контроллер? то есть app/Http/Controllers/API/ServiceController.php ?
Я же написал, как посмотреть реальный SQL-запрос, либо через Laravel Debugbar (если есть вьюхи ларавельские), либо через то расширение. Про вставку какого-то кода в test.php - вообще бред какой-то. У тебя вообще есть понимание, что в коде происходит? И что MySQL и другие СУБД про пых и ларавел слыхом не слыхивали, а выполняют только SQL. Т.е. внутри ларки происходит преобразование вот этих всех объектов в обычные SQL-запросы. Когда что-то не так, самый лучший способ - посмотреть, что за запрос, и добиться правильного выполнения.