Laravel по-русски
Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Здравствуйте. Помогите мне советом, пожалуйста.
Есть в базе список категорий. Эти категории выводятся пользователю в виде списка checkbox-ов. Пользователь может выбрать несколько категорий и его выбор запишется в БД. С этим всё просто.
Возник вопрос: а если злоумышленник подменит значения этих checkbox и в базу запишутся несуществующие значения? Из этого вопроса вытекает следующий:
Как можно провести проверку (валидацию) массива выбранных с помощью checkbox значений на наличие их в базе?
Приведите пример (в Вашем понимании):
1) правильно
2) не правильно
И, как вариант, что Вам мешает проводить свою валидацию (проверку) на сравнение - есть сие в базе или нет?
}%У меня ни разу 500 не появлялась. Завтра обновлю форум, возможно у него какие-то проблемы с новым PHP.
Все заработало!! Спасибо)
Пример выборки по цене от 1000 до 3000
$data=DB::table('products')->whereBetween('price',[1000, 3000]) ->leftJoin('categories','products.category_id','=','categories.id') ->leftJoin('atributes','atributes.category_id','=','categories.id') ->leftJoin('value','value.atribute_id','=','atributes.id') ->select('products.name as name','products.price as price','categories.name as category','atributes.name as atribute','value.value') ->orderBy('products.price') ->get();
Спасибо) Ну это просто, так как price находится в главной (protuct) таблице, а вот атрибуты в отдельной (product_attributs) и к одному продукту могут относиться несколько атрибутов. И отличить атрибуты можно только по product_id (как привязка к продукту) и attribute_id (как как привязка к идентификатору атрибута).
Т.е. у продукта может быть несколько атрибутов с одинаковыми value и отличатся только по id атрибута.
А значит нудно фильтровать value по соответствующему attribute_id который принадлежит protuct_id.
О как завернул))
Пока однозначного решения не нашел.
Особо интересна ситуация в том, что когда "разлогинишся" то все нормально, но после "прилогинивания" вновь те же "грабли" ))))
Мистика!
На форуме пытаюсь зайти на https://laravel.ru/forum/viewtopic.php?id=687
и выдает 502 Bad Gateway.
В чем проблема?
Через Eloquent скорее все не получится. Через ОРМ работает.
Это запрос всех товаров со всеми атрибутами и значениями атрибутов, с названием категории с сортировкой по цене.class MainController extends BaseController { public function index() { $data=DB::table('products') ->leftJoin('categories','products.category_id','=','categories.id') ->leftJoin('atributes','atributes.category_id','=','categories.id') ->leftJoin('value','value.atribute_id','=','atributes.id') ->select('products.name as name','products.price as price','categories.name as category','atributes.name as atribute','value.value') ->orderBy('products.price') ->get(); return View::make('index',['data'=>$data]); } } Во вьюшке делаешь разбор @foreach($data as $item) {{$item->price}} {{$item->name}} .... {{$item->value}}
Спасибо ))))))
Попробую так.
Есть таблица со списком пользователей, к каждому пользователю через ajax вызывается форма для редактирования. При перезагрузке страницы первый ajax запрос проходит мгновенно, а вот все остальные с большими задержками. Читал что проблема в сессиях. Как решить проблему?
Исходник в студию
Иначе как понять
Можно использовать в том месте где выводим меню
@include('menu')
Для меню создать отдельную модель.
Для каждого товара атрибут только один? Т.е. если это жесткий диск, то он имеет только объем? Или атрибутов для каждого товара буде много? Объем, размер, скорость и.т.д.?
Ну, на самом деле атрибутов много)))
И, в зависимости от категории, будут выводится разные (как количественно, так и качественно).
Как пример - вывод всех (почти всех ))) атрибутов:
Общее представление таблиц с содержимым:
(таблица categories)
id | name
1 | Жесткие диски
2 | Аккумуляторы
(таблица protucts)
id | category_id | name | price
1 | 1 | WD | 100
2 | 1 | Sams | 200
3 | 2 | Super| 20
(таблица attributes)
id | category_id | name
1 | 1 | Объём
2 | 1 | Тип
3 | 1 | Скорость
4 | 2 | Ёмкость
5 | 2 | Тип
(таблица protuct_attributes)
id | protuct_id | attribute_id | value
1 | 1 | 1 | 1Tb
2 | 1 | 2 | sata II
3 | 1 | 3 | 7 200
4 | 2 | 1 | 2Tb
5 | 2 | 2 | sata III
6 | 2 | 3 | 10 000
7 | 3 | 4 | 2800
8 | 4 | 5 | AA
Вот, как то так))
Задача заключается в том, что бы одним запросом отсортировать и вывести данные по продукту
как по цене (таб. products) , так и скорости (таб. attributes, protuct_attributes ) (для жестких дисков, как вариант)
Но создается такое впечатление, что в laravel, средствами ORM, подобные запросы в принципе не возможны.
Тут еще не указанно одна таблица product_images - там хранятся ссылки на изображения продуктов.
Вот почему принципиально важно решить задачу именно с использованием ORM.
Буду признателен за правки и любую конструктивную критику )))))
Нашел решение (хотя и не самое изящное).
По поводу таблиц, думаю все же правильная структура выбрана. Скорее всего не хватает некой связующей таблицы как вешнего ключа.
Если кто поправит или подскажет - спасибо огромное.
Эта мой первый проект на laravel и грабли, думаю не избеджны )))
По-моему, здесь проблема не в запросе, а скорее в неправильно спроектированных таблицах.
По моему Вы правы. По определению Entity–attribute–value, Value должен быть отдельной таблицей.
Но всеравно, как тогда организовывать запрос-выборку?
По-моему, здесь проблема не в запросе, а скорее в неправильно спроектированных таблицах.
Возможно Вы правы. Как Вы считаете, что нужно именно сделать?
И как все же реализовать запрос?
Спасибо )
Посмотри https://www.youtube.com/watch?v=SUlTlGbgt20 ,толково объясняет.
Это если по другому ни как, но лучше как предложил schel4ok
Всем доброго времени суток.
Необходимо сделать в одном запросе выборку из двух таблиц.
1) есть таблица товара Products
id | category_id | name | price
в ней есть колонка цена - price (что логично общее для всех продуктов)
2) есть таблица атрибутов Attributes
id | category_id | name
в ней хранятся названия уникальных атрибуты для товаров
как вариант:
аккумуляторы - емкость
жесткий диск - объем
3) есть таблица принадлежности атрибута продукту Product_Attributes
id | product_id | attribute_id | value
как понятно из названия тут соответствия продукта атрибуту
полюс еще колонка value - тут собственно сами данные атрибута
Собственно проблема в том, что необходимо сделать выборку из двух таблиц:
по price (от и до) и по value (от и до) скажем для "жесткого диска"
В Products прописана связь одинКоМногим
public function productattributes() {
return $this->hasMany('ProductAttribute');
}
В Product_Attributes прописана связь многиеКОдному
public function product() {
return $this->belongsTo('Product');
}
Подскажите как правильно организовать запрос.
Пробовал в начале так:
$products = Product::orderBy('updated_at', 'DESC')
->where('category_id', '=', $id)
->whereBetween('price', [$priceMin, $priceMax])
->with('productattributes')
->whereBetween('value', [$sizeMin, $sizeMax])
->get();
Но (как всем понятно) это не сработало.
Я понимаю, что что-то не понимаю, в что понять не могу. (((((
За ранее спасибо всем.
Да, действительно все очень просто. Не получалось только из-за моей невнимательности.
Прошу прощения у сообщества. Впредь постараюсь зря не беспокоить.
Еще раз спасибо и удачи всем.
так же как в одну, какая в сущности разница?
три одинаковых последовательных действия .
Я понимаю, что разници никакой. Но это все нужно делать в одной Моделе, или в разных, а потом вызывать в одном Контроллере?
Спасибо.
Доброго времени суток.
Есть задача - добавление данных из формы в несколько таблиц (точнее в три).
Подскажите где можно прочесть про подобное решение.
Использую Eloquent.
За ранее спасибо.