@NikSIk31

Laravel объединить результаты поиска?

У меня есть 2 таблицы С РАЗНЫМ количеством колонок. И ещё есть трейт, который ищет по определённым колонкам в таблице (в данном случае эти колонки присутствуют в двух таблицах).

Чтобы найти в одной таблице я вызываю:
Studio::search($request->s)->get();

Как можно объединить результаты поиска из двух таблиц с пагинацией?

Код трейта на всякий случай:
<?php

namespace App\Models;

trait FullTextSearch
{
    /**
     * Replaces spaces with full text search wildcards
     *
     * @param string $term
     * @return string
     */
    protected function fullTextWildcards($term)
    {
        // removing symbols used by MySQL
        $reservedSymbols = ['-', '+', '<', '>', '@', '(', ')', '~'];
        $term = str_replace($reservedSymbols, '', $term);

        $words = explode(' ', $term);

        foreach($words as $key => $word) {
            /*
             * applying + operator (required word) only big words
             * because smaller ones are not indexed by mysql
             */
            if(strlen($word) >= 3) {
                $words[$key] = '+' . $word . '*';
            }
        }

        $searchTerm = implode( ' ', $words);

        return $searchTerm;
    }

    /**
     * Scope a query that matches a full text search of term.
     *
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @param string $term
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeSearch($query, $term)
    {
        $columns = implode(',',$this->searchable);

        $query->whereRaw("MATCH ({$columns}) AGAINST (? IN BOOLEAN MODE)" , $this->fullTextWildcards($term));

        return $query;
    }
}
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
есть несколько проблем. Или вы используете sql с offset/limit для пагинации с загрузкой только конкретной страницы, или вы выгружаете данные в массив, и пагинируете все данные из таблиц в массиве в оперативной памяти.
Если у вас жирно по оперативке, или мало данных в таблицах - то проблем нет.
Если данных много - ничего у вас не получится, нужно конкатенировать данные в одну финальную структуру. И работать на уровне SQL
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы