Jackson
Jackson

Reputation: 189

Laravel how to get only relation data

this is my User.php relation code

    public function activities()
    {
        return $this->hasMany(Activities::class, 'builder');
    }

and this is my query to get only relation data

return User::whereHas('activities', fn($query) => $query->where('user_id', 1))
            ->paginate();

but it returns only user data without appling any relation, and its pagination not get to use pluck

i have also tried this

User::where('username', request()->username)->has('activities')->paginate();

but i need only get relation data not user with relation, and i prefer do it with whereHas

Upvotes: 0

Views: 597

Answers (1)

zlodes
zlodes

Reputation: 784

You need to create reverse relation for Activities model:

class Activities extends Model
{
    // ...
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class, 'user_id');
    }
}

And get all the activities using Activities builder:

$paginated = Acitivities::query()
    ->whereHas('user', static function(Builder $userQuery) {
        $userQuery->where('name', request()->username); // Think about security!
    })
    ->paginate();

Note: All the models must be named in singular (e.g. Activity, User, Product and etc.).

Upvotes: 1

Related Questions