WhereHas() In Laravel


Let’s get started quickly
You may want to base your results on the existence of a relationship. For example, imagine that you want to retrieve all projects that have project_one starting with ,CSS. To do this, you can pass the name of the relationship to the whereHas() method and specify additional query constraints for has queries

Project::whereHas('project_one', function (Builder $query) {
    $query->where('title', 'like', 'CSS%');
})->get();

use with() method with WhereHas()

Project::with('project_one')->whereHas('project_one', function (Builder $query) {
       $query->where('title', 'like', 'CSS%');
})->get();

Now, Let’s be more professional

public function scopeWithWhereHas($query, $relation, $constraint){
   return $query->whereHas($relation, $constraint)->with([$relation => $constraint]);
}

Then

Project::withWhereHas('project_one', fn($query) =>
     $query->where('title', 'like', 'CSS%')
)->get();

Since this query builder may be needed in many Models in AppServiceProvider::boot()

use IlluminateDatabaseEloquentBuilder;
Builder::macro('withWhereHas', fn($relation, $constraint) =>
   $this->whereHas($relation, $constraint)->with([$relation => $constraint]);
);

I hope you enjoy the code.

Source: DEV Community

November 21, 2021
Category : News
Tags: beginners | laravel | php | programming

Leave a Reply

Your email address will not be published. Required fields are marked *

Sitemap | Terms | Privacy | Cookies | Advertising

Senior Software Developer

Creator of @LzoMedia I am a backend software developer based in London who likes beautiful code and has an adherence to standards & love's open-source.