За последние 24 часа нас посетили 18892 программиста и 1604 робота. Сейчас ищут 1114 программистов ...

API route не работает

Тема в разделе "Laravel", создана пользователем pix3x, 30 май 2022.

  1. pix3x

    pix3x Новичок

    С нами с:
    26 фев 2021
    Сообщения:
    8
    Симпатии:
    0
    В таблице "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):
    1. Route::get('category-list',[API\CategoryController::class,'getCategoryList']);
    2. Route::get('subcategory-list',[API\SubCategoryController::class,'getSubCategoryList']);
    3. Route::get('service-list',[API\ServiceController::class,'getServiceList']);
    4. 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:
    1. use App\Http\Controllers\Controller;
    2. use Illuminate\Http\Request;
    3. use App\Models\Service;
    4. use App\Models\Coupon;
    5. use App\Models\BookingRating;
    6. use App\Models\UserFavouriteService;
    7. use App\Models\ServiceFaq;
    8. use App\Http\Resources\API\ServiceResource;
    9. use App\Http\Resources\API\UserResource;
    10. use App\Http\Resources\API\ServiceDetailResource;
    11. use App\Http\Resources\API\BookingRatingResource;
    12. use App\Http\Resources\API\CouponResource;
    13. use App\Http\Resources\API\UserFavouriteResource;
    14. use App\Http\Resources\API\ProviderTaxResource;
    15. use App\Models\ProviderServiceAddressMapping;
    16. use App\Models\ProviderTaxMapping;
    17. class ServiceController extends Controller
    18. {
    19.     public function getServiceList(Request $request){
    20.  
    21.         $service = Service::with(['providers','category','serviceRating']);
    22.  
    23.         if($request->has('status') && isset($request->status)){
    24.             $service->where('status',$request->status);
    25.         }
    26.    
    27.         if($request->has('provider_id')){
    28.             $service->where('provider_id',$request->provider_id);  
    29.         }
    30.    
    31.         if($request->has('category_id')){
    32.             $service->where('category_id',$request->category_id);
    33.         }
    34.  
    35.         if($request->has('is_featured')){
    36.             $service->where('is_featured',$request->is_featured);
    37.         }
    38.         if($request->has('is_discount')){
    39.             $service->where('discount','>',0)->orderBy('discount','desc');
    40.         }
    41.         if($request->has('is_rating') && $request->is_rating != ''){
    42.             $service->whereHas('serviceRating', function($q) use ($request) {
    43.                 $q->select('service_id',\DB::raw('round(AVG(rating),0) as total_rating'))->groupBy('service_id');
    44.                 return $q;
    45.             });
    46.         }
    47.         if($request->has('is_price_min') && $request->is_price_min != '' || $request->has('is_price_max') && $request->is_price_max != ''){
    48.             $service->whereBetween('price', [$request->is_price_min, $request->is_price_max]);
    49.         }
    50.         if ($request->has('city_id')) {
    51.             $service->whereHas('providers', function ($a) use ($request) {
    52.                 $a->where('city_id', $request->city_id);
    53.             });
    54.         }
    55.    
    56.         if($request->has('provider_id') && $request->provider_id != '' ){
    57.             $service->whereHas('providers', function ($a) use ($request) {
    58.                 $a->where('status', 1);
    59.             });
    60.         }else{
    61.             if(default_earning_type() === 'subscription'){
    62.                 $service->whereHas('providers', function ($a) use ($request) {
    63.                     $a->where('status', 1)->where('is_subscribe',1);
    64.                 });
    65.             }
    66.         }
    67.         if ($request->has('latitude') && !empty($request->latitude) && $request->has('longitude') && !empty($request->longitude)) {
    68.             $get_distance = getSettingKeyValue('DISTANCE','DISTANCE_RADIOUS');
    69.             $get_unit = getSettingKeyValue('DISTANCE','DISTANCE_TYPE');
    70.        
    71.             $locations = $service->locationService($request->latitude,$request->longitude,$get_distance,$get_unit);
    72.             $service_in_location = ProviderServiceAddressMapping::whereIn('provider_address_id',$locations)->get()->pluck('service_id');
    73.             $service->with('providerServiceAddress')->whereIn('id',$service_in_location);
    74.         }
    75.  
    76.         if($request->has('search')){
    77.             $service->where('name','like',"%{$request->search}%");
    78.         }
    79.  
    80.         $per_page = config('constant.PER_PAGE_LIMIT');
    81.         if( $request->has('per_page') && !empty($request->per_page)){
    82.             if(is_numeric($request->per_page)){
    83.                 $per_page = $request->per_page;
    84.             }
    85.             if($request->per_page === 'all' ){
    86.                 $per_page = $service->count();
    87.             }
    88.         }
    89.  
    90.         $service = $service->where('status',1)->orderBy('created_at','desc')->paginate($per_page);
    91.         $items = ServiceResource::collection($service);
    92.  
    93.         $response = [
    94.             'pagination' => [
    95.                 'total_items' => $items->total(),
    96.                 'per_page' => $items->perPage(),
    97.                 'currentPage' => $items->currentPage(),
    98.                 'totalPages' => $items->lastPage(),
    99.                 'from' => $items->firstItem(),
    100.                 'to' => $items->lastItem(),
    101.                 'next_page' => $items->nextPageUrl(),
    102.                 'previous_page' => $items->previousPageUrl(),
    103.             ],
    104.             'data' => $items,
    105.             'max'=> $service->max('price'),
    106.             'min'=> $service->min('price'),
    107.         ];
    108.    
    109.         return comman_custom_response($response);
    110.     } ```
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    Дебаг панель стоит? Надо глянуть, что за запрос в итоге выполняется. Если это чистое апи, то я вот этим пользовался, правда, не с последними ларавелями. https://github.com/mlanin/laravel-api-debugger
    --- Добавлено ---
    Берёшь запрос, копируешь в какой-нибудь adminer, phpMyAdmin и прочие системы работы с СУБД, и смотришь, чего вернулось и почему.
     
  3. pix3x

    pix3x Новичок

    С нами с:
    26 фев 2021
    Сообщения:
    8
    Симпатии:
    0
    а как в phpMyAdmin проверить?

    ещё пробовал в test.php писать код:
    Код (Text):
    1. $service = $service->where('status',1)->orderBy('created_at','desc')->paginate($per_page);
    2. 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
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    значить в $service пусто...

    после
    PHP:
    1.  $service = Service::with(['providers','category','serviceRating']);
    вставьте dd($service );
     
  5. pix3x

    pix3x Новичок

    С нами с:
    26 фев 2021
    Сообщения:
    8
    Симпатии:
    0
    а вставлять dd($service); надо прямо в контроллер? то есть app/Http/Controllers/API/ServiceController.php ?
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    ну я ж даже указал после какой строки... она еще где-то есть?
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    Я же написал, как посмотреть реальный SQL-запрос, либо через Laravel Debugbar (если есть вьюхи ларавельские), либо через то расширение.

    Про вставку какого-то кода в test.php - вообще бред какой-то.

    У тебя вообще есть понимание, что в коде происходит? И что MySQL и другие СУБД про пых и ларавел слыхом не слыхивали, а выполняют только SQL. Т.е. внутри ларки происходит преобразование вот этих всех объектов в обычные SQL-запросы. Когда что-то не так, самый лучший способ - посмотреть, что за запрос, и добиться правильного выполнения.