«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2020/08/26 08:49:50  №1788527 1
Пишу небольшой интернет магазин на laravel, сейчас думаю как лучше реализовать фильтр товаров. Аттрибуты каждого товара хранятся в json поле базы в виде:

{"factory": "Восход", "material": "Пластик"}

Как лучше в таком случае реализовать фильтр товаров? Мне в голову пришло только сделать в каталоге формочку, которая отправляет get запрос вида /products?factory=Восход&material=Пластик

Это совсем говно, или сойдет? Ничего страшного в том, что кириллицу передаем в get параметрах, или может есть более элегантное решение?
Ответы: >>1788530
Аноним 2020/08/26 08:54:28  №1788530 2
>>1788527
Ебать ты атрибуты запихнул, конечно.
Я не в курсе за вашу ларавель, но бля. Из такой штуки тупо неудобно их искать же. Медленно через like выходит же.

Ответы: >>1788541
Аноним 2020/08/26 09:07:09  №1788541 3
>>1788530
>Ебать ты атрибуты запихнул, конечно.
Аттрибуты довольно разные, и точный список заранее неизвестен, поэтому нужно что-то гибкое и более-менее масштабируемое. От EAV решил отказаться, а nosql не хочется тащить сюда. Поэтому решил аттрибуты хранить в json и просто прописать их в админке при добавлении товара.

Like не нужен, в mysql завезли же поддержку json полей, искать можно так:

select * from `products` where json_unquote(json_extract(`attributes`, '$."factory"')) = 'Восход'
Ответы: >>1788552 >>1788588
Аноним 2020/08/26 09:23:40  №1788552 4
>>1788541
а ты уверен, что лара так умеет?)
Ответы: >>1788555
Аноним 2020/08/26 09:27:04  №1788555 5
>>1788552
https://laravel.com/docs/7.x/queries#json-where-clauses

DB::table('products')->where('attributes->factory', 'Восход')->get();

Или ты думаешь что json лучше не хранить в mysql? Как тогда лучше поступить, какую струкуру бд выбрать, чтобы без json обойтись?