Home > Back-end >  Get data on relation 'B' where relation 'A' does not exits in same id in laravel
Get data on relation 'B' where relation 'A' does not exits in same id in laravel

Time:08-27

I have two tables named "Student" and "Subscription". If there is at least one active plan in the subscription database, I check by date. I need to get the data if no plan is active. Below is the code I used to get the data. But this is wrong because in this query I am getting all the expired data and I should get the data only if there is not even one plan active in the student id.

$expired_student = Student::wherehas('getSubscription', function ($query) use ($current_date){
        $query->where('expired_at','<',$current_date);
    })->where('status',1)->count();

anyone can please help me to solve this problem

CodePudding user response:

In you Student model, you can define a relationship method called activeSubscriptions, like this:

public function activeSubscriptions() {
   return $this->hasMany(Subscription::class)->where(function($query) {
             $query->whereNull('expired_at')->orWhere('expired_at', '>', now());
          });
}

And you can use this function like this:

$expiredStudents = Student::doesntHave('activeSubscriptions')->get();
  • Related