使用轴列laravel过滤具有检查条件的数据

使用轴列laravel过滤具有检查条件的数据,laravel,eloquent,Laravel,Eloquent,我被困在私人关系中。 我有模型 用户模型 public function subscriptionsStatus() { return $this->belongsToMany(SubscriptionPackage::class)->withTimestamps()->withPivot('subscription_status','expires_on','id'); } 订阅包模型 public function users()

我被困在私人关系中。 我有模型 用户模型

public function subscriptionsStatus()
    {
        return $this->belongsToMany(SubscriptionPackage::class)->withTimestamps()->withPivot('subscription_status','expires_on','id');
    }
订阅包模型

public function users()
    {
        return $this->belongsToMany(User::class, 'subscription_package_user','subscription_package_id','user_id');
    }
我已尝试返回所有用户的订阅和课程。。为此,我尝试了下面的代码,它运行良好

$user=User::with(['studentDetails','subscriptionsSatus.courses'])
                        ->withPagination($offset,$perPage)
                        ->get()
                        ->sortBy('first_name')->values();
上面的代码正在返回,下面给出了响应

[
{
    "id": 44,
    "first_name": "Abcd Test",
    "last_name": "Test lastname",
    "student_details": null,
    "subscriptions_satus": [
        {
            "id": 1,
            "name": "Gold",
            "price": 3000,
            "user_id": "2"
            "pivot": {
                "user_id": 44,
                "subscription_package_id": 1,
                "subscription_status": "on_free_trial",
                "expires_on": null,
                "id": 9
            },
            "courses": [
                {
                    "id": 18,
                    "title": "English Grammar for Class 3",
                    "price": 400,
                    "strikethrough_price": null,
                    "status": "draft",
                    "user_id": 2,
                    "image": "http://127.0.0.1:8000/courses/1615702915.png",
                    "description": null,
                    "pivot": {
                        "subscription_package_id": 1,
                        "course_id": 18,
                    }
                }
            ]
        }
    ]
}]
但是我想返回pivot表中具有
subscription\u status=$filter
的用户。为此,我已经试过了

$filter=$request->input('filter')??"active";
$user=User::with(['studentDetails','subscriptionsStatus.courses'])
                         ->whereHas('subscriptionsStatus', function($query) use($filter){
                             $query->wherePivot('subscription_status','=',$filter);
                         })
                            ->withPagination($offset,$perPage)
                            ->get()
                            ->sortBy('first_name')->values();
后来我发现,
wherePivot
只能在模型中使用。现在我被困在这里,上面的代码给了我error=unknown列“
pivot
”。
我如何返回所有拥有
subscription\u status=$filter???

的用户,因为您只有2个状态,所以您可以再创建2个具有以下关系的函数

公共函数activeSubscriptions()
{
返回$this->belongToMany(SubscriptionPackage::class)
->withTimestamps()
->wherePivot(“订阅状态”,“活动”);
} 
公共函数freeTrailSubscriptions()
{
返回$this->belongToMany(SubscriptionPackage::class)
->withTimestamps()
->wherePivot('subscription_status','on_free_trail');//根据您的值更改此基础
}
然后在控制器中,您可以像这样进行过滤

$filter=$request->input('filter')??“主动”;
$user=user::with(['studentDetails','subscriptionstatus.courses']))
->当($filter=='active',函数($q){
$q->with('activeSubscriptions');
})
->当($filter=='on\u free\u trail',函数($q){
$q->with('freeTrailSubscriptions');
})
->带分页($offset$每页)
->得到()
->sortBy('first_name')->values();

您可以在模型中创建函数,然后使用过滤器并调用这些函数function@KamleshPaul你能把这个函数写成下面的答案吗?请。。如果你不介意有多少订阅状态可以进入?两个,如活动和免费