Skip to content

Instantly share code, notes, and snippets.

@driesvints
Created July 3, 2017 07:37
Show Gist options
  • Save driesvints/4c59db2d88774996bc8955a17bd48374 to your computer and use it in GitHub Desktop.
Save driesvints/4c59db2d88774996bc8955a17bd48374 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