Laravel - сортировка запроса по появлению массива слов - PullRequest
0 голосов
/ 06 июля 2018

С помощью следующего кода я могу получить необходимые данные, но я также хочу отсортировать.

Допустим, найдено только 3 строки, по первому найдено совпадение одного слова на втором он нашел совпадение двух слов на третьем он нашел совпадение одного слова.

$keyword = "metal chairs";
$keywordArr = explode(" ", $keyword);

$productData = $productData->where(function ($query) use ($keyword, $MykeywordArr) {
    $query->orWhere('products.name', 'like', $keyword . '%');
    $query->orWhere('products.info', 'like', $keyword . '%');
    foreach ($MykeywordArr as $keywordKey => $keywordValue) {
        $query->orWhere('products.name', 'like', '%' . $keywordValue . '%');
        $query->orWhere('products.info', 'like', '%' . $keywordValue . '%');
    }
});

// sorting for $productData goes here:

1 Ответ

0 голосов
/ 06 июля 2018

Итак, вы хотите отсортировать записи по количеству попаданий по ключевым словам в каждой записи. Я написал простую библиотеку поиска для Eloquent, которая может помочь с этим. Он ранжирует записи в зависимости от того, сколько раз каждое ключевое слово встречается в заданных полях (которые вы можете настроить), и возвращает его как коллекцию Laravel. Проверьте это здесь: glmdev / search на Github .

Это даст вашей модели search() метод, подобный так:

$products = $productData->search("metal chairs");

Если вам действительно нужно заново реализовать его самостоятельно, код для того, как я отсортировал модели по ключевому слову , доступен здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...