Skip to content

Instantly share code, notes, and snippets.

@codyphobe
Forked from driesvints/SearchThreads.php
Created July 20, 2017 22:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codyphobe/2444d1c166fe321f8590e7bacddd9e57 to your computer and use it in GitHub Desktop.
Save codyphobe/2444d1c166fe321f8590e7bacddd9e57 to your computer and use it in GitHub Desktop.
Multiple method query objects
<?php
$searchThreads = app(App\Queries\SearchThreads::class);
$allThreads = $searchThreads('foo');
$paginatedThreads = $searchThreads->paginated('foo');
<?php
namespace App\Queries;
use App\Models\Thread;
use Illuminate\Contracts\Pagination\Paginator;
class SearchThreads
{
public function __construct()
{
// gets resolved through IoC.
}
/**
* @return \App\Models\Thread[]
*/
public function __invoke(string $keyword)
{
return $this->base($keyword)->get();
}
/**
* @return \App\Models\Thread[]
*/
public function paginated(string $keyword, int $perPage = 20): Paginator
{
return $this->base($keyword)->paginate($perPage);
}
private method base(string $keyword)
{
return Thread::feedQuery()
->where('threads.subject', 'LIKE', "%$keyword%")
->orWhere('threads.body', 'LIKE', "%$keyword%");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment