Search code examples
laravelwhere-clauseeloquentbelongs-to

Eloquent where condition based on a "belongs to" relationship


Let's say I have the following model:

class Movie extends Eloquent
{
    public function director()
    {
        return $this->belongsTo('Director');
    }
}

Now I'd like fetch movies using a where condition that's based on a column from the directors table.

Is there a way to achieve this? Couldn't find any documentation on conditions based on a belongs to relationship.


Solution

  • You may try this (Check Querying Relations on Laravel website):

    $movies = Movie::whereHas('director', function($q) {
        $q->where('name', 'great');
    })->get();
    

    Also if you reverse the query like:

    $directorsWithMovies = Director::with('movies')->where('name', 'great')->get();
    // Access the movies collection
    $movies = $directorsWithMovies->movies;
    

    For this you need to declare a hasmany relationship in your Director model:

    public function movies()
    {
        return $this->hasMany('Movie');
    }
    

    If you want to pass a variable into function($q) { //$variable } then

    function($q) use ($variable) { //$variable }