【问题标题】:如何从 Laravel 8 中的关系中过滤数据?
【发布时间】:2022-01-19 10:32:22
【问题描述】:

我有 3 张表业务、服务、服务场所。我需要具有 service_name = $search 的业务服务,并获得选定服务的场所。我正在使用服务和资源方法。

当存在 search_keyword 时,数据不会被过滤。但其他条件正在发挥作用。 我该如何解决这个问题?

在商业模式中

public function businessServices()
    {
        return $this->hasMany(BusinessService::class);
    }

在业务服务模型中

 public function businessServiceVenues()
    {
        return $this->hasMany(BusinessServiceVenue::class);
    }

在服务文件中

public function getServices($business){
       $businessservices =  $business->with(['businessServices'=> function ($q){
            $q->where('business_services.service_name', 'like', '%'.request()->search_key.'%');
        }
        ])->first();        
        return  new servicesResource($businessservices);
    }

在服务资源中

$services = $this->businessServices()
        ->with(['businessServiceStaffs','businessServiceVenues'])
        ->when(request()->filled('venue_ids'), function ($q) use($request) {
            $q->whereHas('businessServiceVenues', function($q1) use($request) {
                $q1->whereIn('venue_id',$request->venue_ids);
            });
          })
        ->when(request()->filled('staff_id'), function ($q) use($request) {
            $q->whereHas('businessServiceStaffs', function($q1) use($request) {
                $q1->where('staff_id','=',$request->staff_id);
            });
          })
        ->get();

【问题讨论】:

  • 你试过这个 $businessservices = $business->whereHas('businessServices',function (\Illuminate\Database\Eloquent\Builder $q){ $q->where('service_name', ' like', '%'.request()->search_key.'%'); } ])->first();

标签: laravel eloquent laravel-resource


【解决方案1】:

这对我有用

$businessServices = $business->businessServices()
            ->with(['businessServiceStaffs', 'businessServiceVenues'])
            ->when(request()->filled('search_key'), function ($q) {
                $q->where('business_services.service_name', 'like', '%' . request('search_key') . '%');
            })
            ->when(request()->filled('venue_ids'), function ($q) {
                $q->whereHas('businessServiceVenues', function ($q) {
                    $q->whereIn('venue_id', request('venue_ids'));
                });
            })
            ->when(request()->filled('staff_id'), function ($q) {
                $q->whereHas('businessServiceStaffs', function ($q) {
                    $q->where('staff_id', '=', request('staff_id'));
                });
            })
            ->get();

【讨论】:

    猜你喜欢
    • 2018-10-04
    • 2021-08-07
    • 1970-01-01
    • 2019-07-24
    • 2015-01-29
    • 2017-08-11
    • 2021-12-30
    • 2021-03-09
    • 2020-12-17
    相关资源
    最近更新 更多