Как сохранить критерии фильтра пользователя?

У меня есть приложение Laravel, использующее базу данных MySQL с миллионами записей в нескольких таблицах, которые упрощаются:

Table: products  
Columns: product_id name price stockist colour brand stock date_added

Table: stockists  
Columns: stockist_id name phone email post_code stock

Table: categories  
Columns: category_id name slug level

Table: category_product  
Columns: category_id product_id

Пользователи могут искать продукты на основе большого количества критериев (приблизительно 15), охватывая почти все связанные с продуктом данные. Пример поиска может выглядеть так:

Верните первые 50 продуктов, которые:
- стоят более 5
фунтов стерлингов - стоят меньше 30
фунтов стерлингов - маркируются компаниями «Apple», «Samsung» или «LG»
- относятся к «зарядным устройствам» или «аккумуляторам» категорий, но не «случаи» или «обложки» или «автомобильные зарядные устройства»
- были добавлены менее двух недель назад

Я хочу иметь возможность хранить параметры поиска против пользователя, который сделал их, чтобы они могли повторно запускать поиск несколько раз. Из моих исследований решения, с которыми я столкнулся, включают представления, которые, как я считаю, не будут работать, поскольку они не принимают параметры и подготовленные утверждения, которые не будут работать, так как они не могут быть сохранены. Это оставляет хранимые процедуры или сохранение в выделенной таблице со столбцом для каждого параметра. Я склоняюсь к последней из двух, хотя я вижу, что очень быстро запутался. Может ли кто-нибудь указать мне на лучшее решение проблемы? Благодарю.

php,mysql,sql,database,laravel,

0

Ответов: 1


0

Если вы не хотите поддерживать список столбцов фильтра, вы можете использовать шаблон сохранения значения ключа.

table: user_search_criteria
columns: user_id, key, value

$criterium = new UserSearchCriteria();
$criterium->user_id = $user->id;
$criterium->key     = 'price';
$criterium->value   = '<= 100';
$criterium->save();

Но я думаю, вам не нужно долго запоминать критерии, поэтому я бы использовал Redis для этого.

Redis::set('criteria.' . $username, $criteria);

$criteria = Redis::get('criteria.' . $username);
PHP, MySQL, MS SQL, базы данных, Laravel,
Похожие вопросы