Поиск по тегам и именам
У меня в базе три таблицы (данные в таблицах для примера):
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.