function($query) { $query->select('users.id', 'username'); }, 'tags' => function($query) { $query->select('tags.id', 'name', 'slug'); } ])->select(['id', 'user_id', 'title']); if (!empty($_GET['q']) && is_string($_GET['q'])) { $tags = explode(',', $_GET['q']); $pastes = $pastes->whereHas('tags', function($query) use ($tags) { $query->where('name', $tags); }); } $pastes = $pastes->get(); header('Content-Type: application/json; charset=UTF-8'); echo json_encode(['data' => $pastes->map(function($paste) { return [ 'id' => $paste->id, 'title' => $paste->title, 'author' => $paste->user->username, 'tags' => $paste->tags->map(function($tag) { return ['slug' => $tag->slug, 'name' => $tag->name]; }) ]; })]);