简体   繁体   中英

Querying on related models using Laravel 4 and Eloquent

Using Laravel 4 I have the following models and relations: Event which hasMany Record which hasMany Item. What I would like to do is something like this

Item::where('events.event_type_id', 2)->paginate(50);

This of cause doesn't work as Eloquent doesn't JOIN the models together when retrieving the records. So how do I go about this without just writing the SQL myself (which I would like to avoid as I want to use pagination).

What you want is eager loading .

It works like this if you want to specify additional constraints:

Item::with(array('events' => function($query) {
    return $query->where('event_type_id', 2);
}))->paginate(50);

There is a pull request pending here https://github.com/laravel/framework/pull/1951 .

This will allow you to use a constraint on the has() method, something like this:

$results = Foo::has(array('bars' => function($query)
{
    $query->where('title', 'LIKE', '%baz%');
}))
->with('bars')
->get();

The idea being you only return Foos that have related Bars that contain the string 'baz' in its title column.

It's also discussed here: https://github.com/laravel/framework/issues/1166 . Hopefully it will be merged in soon. Works fine for me when I update my local copy of the Builder class with the updated code in the pull request.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM