Pedro
Pedro

Reputation: 1178

Laravel 5 hasMany relation returning incorrect relations

I have a Yard model and Treatment model, I am using the following hasMany relationship to return treatments that are currently active:

public function activeTreatments() {
    return $this->hasMany('App\Models\Treatment')
    ->where(function ($q) {
        $q->where('expires_at','>=', Carbon::now('Pacific/Auckland'))
        ->where('completed_at','>', Carbon::now('Pacific/Auckland'));
    })
    ->orWhere('completed',false);   
}

For some reason when I add the ->orWhere('completed',false) the query returns all treatments not just the treatments associated with the specific yard. What am I doing wrong here?

Upvotes: 1

Views: 104

Answers (1)

James
James

Reputation: 16359

It's hard to say exactly what is going on without inspecting the SQL being generated.

Wherever you are using this code, you could chain a toSql() on the end to see what the query looks like (use this where you would use a get()). Or you could enable the query log to see what is being queried.

Given the symptoms, it is likely that the orWhere() is negating a condition used to filter the models. Try nest the orWhere() inside the current where() statement:

public function activeTreatments() {
    return $this->hasMany('App\Models\Treatment')
    ->where(function ($q) {
        $q->where(function($q), {
            $q->where('expires_at','>=', Carbon::now('Pacific/Auckland'))
                ->where('completed_at','>', Carbon::now('Pacific/Auckland'));
        })->orWhere('completed',false);
    });
}

Upvotes: 3

Related Questions