29
Фев
2020

Поиск по тегам и именам

У меня в базе три таблицы (данные в таблицах для примера):

    files
| id | name |
|  0 | cat  |
|  1 | dog  |

    tags
| id | tag    |
|  0 | animal |
|  1 | gray   |
|  2 | black  |

    file_tags
| file_id | tag_id |
|       0 |      0 |
|       0 |      1 |
|       1 |      0 |
|       1 |      2 |

Мне нужен поиск по всем переданным ключевым словам, чтобы искало и в тегах и в именах файлов. Чем длиннее запрос, тем точнее поиск. Точно такой же поиск в закладках у Firefox'а.

Примеры:

Запрос: animal
Найдет: file cat и file dog

Запрос: cat
Найдет: file cat

Запрос: animal,gray,cat
Найдет: file cat

Запрос: animal,gray,dog
Найдет: ничего

Запрос: cat,dog
Найдет: ничего

Для поиска только по тегам я нашел решение:

public function search(string $search)
{
    $searchArr = explode(",", $search);

    $files = File::whereHas("tags", function($query) use ($searchArr)
                                    {
                                        $query->whereIn("tag", $searchArr);

                                    }, "=", count($searchArr));
    return $files->get();
}

Но как к этому добавить поиск и в именах файлов? И если не с помощью Laravel, то хотя бы как сделать на голом SQL.

Источник: https://ru.stackoverflow.com/questions/1089066/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA-%D0%BF%D0%BE-%D1%82%D0%B5%D0%B3%D0%B0%D0%BC-%D0%B8-%D0%B8%D0%BC%D0%B5%D0%BD%D0%B0%D0%BC

Share

Тебе может это понравится...