使用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();