pix3x's avatar
Level 1

Why one API route doesn't work while others work?

The table categories has 6 records. The table services has 2 records.

bichon.shop/api/category-list (total_items: 6) works fine and returns all 6 records from DB. BUT bichon.shop/api/service-list (total_items: 0) returns zero items... what can be a problem here? Please help.

routes/api.php

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']);

bichon.shop/app/Http/Controllers/API/ServiceController.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);
    } ```



```-bash-4.2$ php artisan route:list --method=GET --name=service
+--------+----------+------------------------------+-------------------+--------------------------------------------------+--------------------------------------------------+
| Domain | Method   | URI                          | Name              | Action                                           | Middleware                                       |
+--------+----------+------------------------------+-------------------+--------------------------------------------------+--------------------------------------------------+
|        | GET|HEAD | service                      | service.index     | App\Http\Controllers\ServiceController@index     | web                                              |
|        |          |                              |                   |                                                  | App\Http\Middleware\Authenticate                 |
|        |          |                              |                   |                                                  | Illuminate\Auth\Middleware\EnsureEmailIsVerified |
|        | GET|HEAD | service/create               | service.create    | App\Http\Controllers\ServiceController@create    | web                                              |
|        |          |                              |                   |                                                  | App\Http\Middleware\Authenticate                 |
|        |          |                              |                   |                                                  | Illuminate\Auth\Middleware\EnsureEmailIsVerified |
|        | GET|HEAD | service/{service}            | service.show      | App\Http\Controllers\ServiceController@show      | web                                              |
|        |          |                              |                   |                                                  | App\Http\Middleware\Authenticate                 |
|        |          |                              |                   |                                                  | Illuminate\Auth\Middleware\EnsureEmailIsVerified |
|        | GET|HEAD | service/{service}/edit       | service.edit      | App\Http\Controllers\ServiceController@edit      | web                                              |
|        |          |                              |                   |                                                  | App\Http\Middleware\Authenticate                 |
|        |          |                              |                   |                                                  | Illuminate\Auth\Middleware\EnsureEmailIsVerified |
|        | GET|HEAD | servicefaq                   | servicefaq.index  | App\Http\Controllers\ServiceFaqController@index  | web                                              |
|        |          |                              |                   |                                                  | App\Http\Middleware\Authenticate                 |
|        |          |                              |                   |                                                  | Illuminate\Auth\Middleware\EnsureEmailIsVerified |
|        | GET|HEAD | servicefaq/create            | servicefaq.create | App\Http\Controllers\ServiceFaqController@create | web                                              |
|        |          |                              |                   |                                                  | App\Http\Middleware\Authenticate                 |
|        |          |                              |                   |                                                  | Illuminate\Auth\Middleware\EnsureEmailIsVerified |
|        | GET|HEAD | servicefaq/{servicefaq}      | servicefaq.show   | App\Http\Controllers\ServiceFaqController@show   | web                                              |
|        |          |                              |                   |                                                  | App\Http\Middleware\Authenticate                 |
|        |          |                              |                   |                                                  | Illuminate\Auth\Middleware\EnsureEmailIsVerified |
|        | GET|HEAD | servicefaq/{servicefaq}/edit | servicefaq.edit   | App\Http\Controllers\ServiceFaqController@edit   | web                                              |
|        |          |                              |                   |                                                  | App\Http\Middleware\Authenticate                 |
|        |          |                              |                   |                                                  | Illuminate\Auth\Middleware\EnsureEmailIsVerified |
+--------+----------+------------------------------+-------------------+--------------------------------------------------+--------------------------------------------------+```
0 likes
7 replies
tisuchi's avatar

@pix3x Make sure, your services table has enough data with status = 1.

And also dd() your $service to check what you are getting before passing to the collection.

$service = $service->where('status',1)->orderBy('created_at','desc')->paginate($per_page);

dd($service);
2 likes
pix3x's avatar
Level 1

@tisuchi I've added dd($service); to the ServiceController.php as you said and the output is still empty and now looks like this:

Illuminate\Pagination\LengthAwarePaginator {#1719 ▼
  #total: 0
  #lastPage: 1
  #items: Illuminate\Database\Eloquent\Collection {#1715 ▼
    #items: []
  }
  #perPage: 10
  #currentPage: 1
  #path: "https://bichon.shop/api/service-list"
  #query: []
  #fragment: null
  #pageName: "page"
  +onEachSide: 3
  #options: array:2 [▶]
}

Here's the services table in myPhpAdmin: prnt.sc/TaM6Pxj9xwc5

What else can I check? Please advise.

2 likes
tisuchi's avatar
tisuchi
Best Answer
Level 70

@pix3x Interesting...

What exactly you are getting if you dd() following query beginning of your function?


    $services = Service::with(['providers', 'category', 'serviceRating'])
        ->where('status', 1)
        ->orderBy('created_at', 'desc')
        ->get();

    dd($services);

2 likes
Jonjie's avatar

Try to remove your eager loading part like so:

$service = Service::query();

instead of $service = Service::with(['providers','category','serviceRating']);

If this works, then there's something wrong with your relationships. Double check every relationship you have in Service model. Might also be data issue in your database.

2 likes
pix3x's avatar
Level 1

Thank you for your help guys, everything works now! The problem was in DB.

2 likes
automica's avatar

@pix3x can you mark this thread as solved please = assign something as best answer.

2 likes

Please or to participate in this conversation.