Added the ability to search by multi-word terms using double quotes.
This commit is contained in:
Nick Walke 2016-03-02 21:38:23 -06:00
parent 54e3122540
commit 5681f4dd69
3 changed files with 24 additions and 3 deletions

View File

@ -226,7 +226,14 @@ class BookRepo
*/ */
public function getBySearch($term, $count = 20, $paginationAppends = []) public function getBySearch($term, $count = 20, $paginationAppends = [])
{ {
$terms = explode(' ', $term); preg_match_all('/"(.*?)"/', $term, $matches);
if (count($matches[1]) > 0) {
$terms = $matches[1];
$term = trim(preg_replace('/"(.*?)"/', '', $term));
} else {
$terms = [];
}
$terms = array_merge($terms, explode(' ', $term));
$books = $this->book->fullTextSearchQuery(['name', 'description'], $terms) $books = $this->book->fullTextSearchQuery(['name', 'description'], $terms)
->paginate($count)->appends($paginationAppends); ->paginate($count)->appends($paginationAppends);
$words = join('|', explode(' ', preg_quote(trim($term), '/'))); $words = join('|', explode(' ', preg_quote(trim($term), '/')));

View File

@ -131,7 +131,14 @@ class ChapterRepo
*/ */
public function getBySearch($term, $whereTerms = [], $count = 20, $paginationAppends = []) public function getBySearch($term, $whereTerms = [], $count = 20, $paginationAppends = [])
{ {
$terms = explode(' ', $term); preg_match_all('/"(.*?)"/', $term, $matches);
if (count($matches[1]) > 0) {
$terms = $matches[1];
$term = trim(preg_replace('/"(.*?)"/', '', $term));
} else {
$terms = [];
}
$terms = array_merge($terms, explode(' ', $term));
$chapters = $this->chapter->fullTextSearchQuery(['name', 'description'], $terms, $whereTerms) $chapters = $this->chapter->fullTextSearchQuery(['name', 'description'], $terms, $whereTerms)
->paginate($count)->appends($paginationAppends); ->paginate($count)->appends($paginationAppends);
$words = join('|', explode(' ', preg_quote(trim($term), '/'))); $words = join('|', explode(' ', preg_quote(trim($term), '/')));

View File

@ -201,7 +201,14 @@ class PageRepo
*/ */
public function getBySearch($term, $whereTerms = [], $count = 20, $paginationAppends = []) public function getBySearch($term, $whereTerms = [], $count = 20, $paginationAppends = [])
{ {
$terms = explode(' ', $term); preg_match_all('/"(.*?)"/', $term, $matches);
if (count($matches[1]) > 0) {
$terms = $matches[1];
$term = trim(preg_replace('/"(.*?)"/', '', $term));
} else {
$terms = [];
}
$terms = array_merge($terms, explode(' ', $term));
$pages = $this->page->fullTextSearchQuery(['name', 'text'], $terms, $whereTerms) $pages = $this->page->fullTextSearchQuery(['name', 'text'], $terms, $whereTerms)
->paginate($count)->appends($paginationAppends); ->paginate($count)->appends($paginationAppends);