Search code examples
laraveleloquentrelation

Get data on relation 'B' where relation 'A' does not exits in same id in laravel eloquent


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


Solution

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