Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте. Проблема в реализации фильтров для товара.
Имеются такие таблицы(Возможное вы меня поправите)
В таблице filters могут быть поля цвет с id=1, размер с id=2 и т.д.
В таблице attributes получается сам атрибут например Красный значит filter_id = 1 и т.д.
В таблице attribute_good уже сами атрибуты для каждого товара
Сам вопрос. Как мне группировать аттрибуты в фильтр?
Вот я себе представляю это так http://jsoneditoronline.org/?id=248ea31 … 794213b0e5
Но сейчас я реализовал это, но есть баг. Выводят атрибуты товара а в них уже как в отношениях выводиться таблица с фильтром. Т.е.
У меня 3 цвета и 2 размера значит будет три раза повторятся фильтр цвет и 2 раза фильтр размер. Т.е. у меня сейчас вот так
http://jsoneditoronline.org/?id=46062b2 … 60351e095c
Как думаете можно ли это реализовать через отношения в Ларе? Или лучше написать через билдер?
Не в сети
В ларавел можно реализовать.
Нужно создать модель для таблицы Attributes и модель для Filters
в Attributes прописать отношение
public function filter()
{
return $this->hasOne('App\Models\Filter');
}
В запросе из БД должен присутствовать метод ->with('filter')
тоесть примерно так:
$result = Attribute::where('id', '=', 1)->with('filter')->first();
Изменено Illia (05.04.2017 20:36:50)
Не в сети
В ларавел можно реализовать.
Нужно создать модель для таблицы Attributes и модель для Filters
в Attributes прописать отношение
public function filter() { return $this->hasOne('App\Models\Filter'); }
В запросе из БД должен присутствовать метод ->with('filter')
тоесть примерно так:
$result = Attribute::where('id', '=', 1)->with('filter')->first();
У меня это есть. Я же прислал ссылочку на json как есть и как нужно что бы было
У меня сейчас реализовано как Goods::with('Attributes.Filters')->find(1); к примеру. И выходит вот так, как показнно по ссылочку json
Не в сети
Я понимаю вашу логику, построения БД, но смею предположить, что она не верна, ибо нельзя мешать в кучу цвета и размеры. Одна таблица - это одна сущность, и размеры, должны быть в отдельной таблице, а цвета в отдельной. В идеале я бы еще и отделил в отдельную таблицу единицы измерения размеров (см, дюймы и прочие). То есть чтобы в таблице размеров было только число, и создать промежуточную таблицу размеров и единиц измерений.
Если Вы хотите подогнать ответ под этот, тогда нужно чтобы запрос был
Goods::with('Filters.Colors', Filters.Sizes')->find(1);
То есть у Вас должна модель фильтров иметь отношение один ко многим цветам и один ко многим размерам. А модель Goods должна иметь отношение - many to many к фильтрам. Ибо один товар может иметь несколько фильтров, и один фильтр, может относится к нескольким товарам.
Отсюда вытекает, что нужно:
- переименовать связующую таблицу attribute_good на filter_good;
- создать таблицу размеров sizes и ее модель;
- создать таблицу размеров colors и ее модель;
И будет вам такой ответ как в джсоне.
Изменено Illia (05.04.2017 22:50:19)
Не в сети
Я понимаю вашу логику, построения БД, но смею предположить, что она не верна, ибо нельзя мешать в кучу цвета и размеры. Одна таблица - это одна сущность, и размеры, должны быть в отдельной таблице, а цвета в отдельной. В идеале я бы еще и отделил в отдельную таблицу единицы измерения размеров (см, дюймы и прочие). То есть чтобы в таблице размеров было только число, и создать промежуточную таблицу размеров и единиц измерений.
Если Вы хотите подогнать ответ под этот, тогда нужно чтобы запрос был
Goods::with('Filters.Colors', Filters.Sizes')->find(1);
То есть у Вас должна модель фильтров иметь отношение один ко многим цветам и один ко многим размерам. А модель Goods должна иметь отношение - many to many к фильтрам. Ибо один товар может иметь несколько фильтров, и один фильтр, может относится к нескольким товарам.
Отсюда вытекает, что нужно:
- переименовать связующую таблицу attribute_good на filter_good;
- создать таблицу размеров sizes и ее модель;
- создать таблицу размеров colors и ее модель;И будет вам такой ответ как в джсоне.
А если нужно будет добавить новый фильтр в админке например, придется делать новую модель? Очень муторно. Не знаете, а нельзя перебрать коллекцию вот ту, что я кидал в виде json в коллекцию которая мне нужна типа цвета: крассный, белый размер:20см 30см?
Просто мне нужно что бы через админ панель легко было добавить новый фильтр и позиции к фильтру.
Не в сети
Страницы 1