Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Mithridates's avatar

eloquent filter result based on foreign table attribute

I'm using laravel and eloquent.
Actually I have problems filtering results from a table based on conditions on another table's attributes.
I have 3 tables:

  • venue
  • city


here are the relationships:
a city has many locations and a location belongs to a city.
a location belongs to a venue and a venue has one location.

I have a city_id attribute on locations table, which you may figured out from relationships.

The question is simple:
how can I get those venues which belong to a specific city?
the eloquent query I expect looks like this:
$venues=Venue::with('location')->where('location.city_id',$city->getKey());

Of course that's not gonna work, but seems like this is common task and there would be an eloquent command for it.
Thanks!

0 likes
1 reply
thomaskim's avatar

@Mithridates Do you only want the venues or do you need to eager load the locations and cities as well? Anyway, try this out:

$venues = Venue::with(['location' => function($query) use ($city_id) {
    $query->where('city_id', '=', $city_id);
}])->get();

Please or to participate in this conversation.