使用Pivot表Laravel Elount筛选数据

使用Pivot表Laravel Elount筛选数据,laravel,eloquent,Laravel,Eloquent,我想根据存储在数据透视表中的用户的subscription\u状态筛选用户。 我有三个表users,subscription\u packages,subscription\u packages\u user $user=User::with(['studentDetails','subscriptionsSatus.courses']) ->withPagination($offset,$perPage)

我想根据存储在数据透视表中的用户的
subscription\u状态
筛选用户。 我有三个表
users
subscription\u packages
subscription\u packages\u user

 $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,
                    }
                }
            ]
        }
    ]
}]
我只想返回具有
subscription\u status=$filter
的用户

$filter='acive'or 'on_free_trail'
我的模型是

public function subscriptionsSatus()
{
    return $this->belongsToMany(SubscriptionPackage::class)->withTimestamps()->withPivot('subscription_status','expires_on','id');
}
我试过了

    $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();

但是找不到“pivot”的Get error列

您需要将
wherePivot
或where
一起使用,如下所示:

public function subscriptionsStatus()
{
    return $this->belongsToMany(SubscriptionPackage::class)
                    ->withTimestamps()
                    ->withPivot('subscription_status','expires_on','id')
                    ->wherePivot(function($q){
                        return $q->where('subscription_status','=','active')
                            ->orWhere('subscription_status','=','on_free_trail');
                    });
}
更新 或在控制器中:


我想在控制器中使用查询,因为$filter是动态的。例如,如果筛选器具有“on_free_trail”,则返回所有用户具有“free_trail”,否则返回所有用户具有“active”订阅。您可以将刀片显示在要显示它们的位置吗@JEJIts是一个API……。很抱歉,回复太晚,您是否在控制器查询中的wherePivot()之前尝试使用Pivot(“…”)?
$user=User::with(['studentDetails','subscriptionsStatus.courses'])
                         ->whereHas('subscriptionsStatus', function($query) use($filter){
                             $query->withPivot('subscription_status')
                                   ->wherePivot('subscription_status','=',$filter);
                         })
                            ->withPagination($offset,$perPage)
                            ->get()
                            ->sortBy('first_name')->values();