*/
public static function fullTextSearchQuery($fieldsToSearch, $terms, $wheres = [])
{
- $termString = '';
- foreach ($terms as $term) {
- $termString .= htmlentities($term) . '* ';
+ foreach ($terms as $key => $term) {
+ $term = htmlentities($term);
+ if (preg_match('/\s/', $term)) {
+ $term = '"' . $term . '"';
+ }
+ $terms[$key] = $term . '*';
}
+ $termString = "'" . implode(' ', $terms) . "'";
$fields = implode(',', $fieldsToSearch);
$termStringEscaped = \DB::connection()->getPdo()->quote($termString);
$search = static::addSelect(\DB::raw('*, MATCH(name) AGAINST('.$termStringEscaped.' IN BOOLEAN MODE) AS title_relevance'));
foreach ($wheres as $whereTerm) {
$search->where($whereTerm[0], $whereTerm[1], $whereTerm[2]);
}
-
// Load in relations
- if (static::isA('page')) {
+ if (static::isA('page')) {
$search = $search->with('book', 'chapter', 'createdBy', 'updatedBy');
} else if (static::isA('chapter')) {
$search = $search->with('book');
} else {
$terms = [];
}
- $terms = array_merge($terms, explode(' ', $term));
+ if (!empty($term)) {
+ $terms = array_merge($terms, explode(' ', $term));
+ }
$pages = $this->page->fullTextSearchQuery(['name', 'text'], $terms, $whereTerms)
->paginate($count)->appends($paginationAppends);