orim
orim

Reputation: 143

Laravel 5, get only relationship for eloquent model

I have a user and article models in my app. The relation between them is straightforward:

//article.php
use Taggable;

public function user()
{
    return $this->belongsTo('App\User');
}

Article uses the Taggable lib which provides me with a variety of methods like Article::withAnyTags (returns all articles tagged with 'xyz' string). Now I'd like to get all users who posted an article/s tagged as 'xyz'. I know how to do this in two lines but something tells me that this is not right. Ideally I'd like to do sth like:

$users = Article::withAnyTags('xyz')->with('user')->select('user'); --pseudocode 

Is it possible to do sth like this in eloquent?

Side note: I knot that I could do this with DB::table but this is not an option for me. Please note that there is no "->get()" at the end on my pseudocode. It's so, because I'm paginating the users' results set with lib which works only with eloquent queries.

Upvotes: 0

Views: 2054

Answers (1)

Rwd
Rwd

Reputation: 35170

You could use whereHas():

User::whereHas('articles', function ($query) {
    $query->withAnyTags('xyz');

})->paginate();

Or if you need to pass a variable of the tags to the closure you could do:

$tag = 'xyz';

User::whereHas('articles', function ($query) use($tag) {
    $query->withAnyTags($tag);

})->paginate();

Upvotes: 2

Related Questions