1
votes

I am studying the Laravel Eloquent Relationships, with different examples. I have a State model and City model, where City belongsTo State and State hasMany City.

As per given code on https://laravel.com/docs/5.7/eloquent-relationships#eager-loading, I successfully queried the states which have cities whose name starts with 'p'. But I am unable to retrieve all those cities whose state names start with 'l'.

This could be a very basic question, but still, I am seeking for help for what goes unsuccessful and why.

2
Thanks @afraz. Isn't is possible to query through the State model, like $states= States::where('city', function ($query) { $query->where('name', 'like', 'p%'); })->get(); ?Kalpashree V. Bal
Above will return you states where related cities name starts with letter pM Khalid Junaid

2 Answers

3
votes

Try this:

State::where('name','like','l%')->get();

For querying relationship:

$states= City::whereHas('state', function ($query) {
   $query->where('name', 'like', 'l%');
})->get();
2
votes

You could use whereHas to apply filter on related models like

$states= City::whereHas('state', function ($query) {
    $query->where('name', 'like', 'i%');
})->get();

Querying Relationship Existence