使用轴列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你能把这个函数写成下面的答案吗?请。。如果你不介意有多少订阅状态可以进入?两个,如活动和免费