Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день.
Захожу в индекс где отображаются все товары. При переходе по ссылке для добавления товара products/create создается запись в таблице с товарами, с дефолтными значениями (посути пустая запись), пользователю в сессию ставится ид только что созданного товара, и происходит редирект на редактирование только что созданного товара products/n/edit. Если пользователь заполнил инфу в товаре и товар успешно сохранился, то ид данного товара из сессии стирается.
Сразу обьясню для чего я это делаю:
При добавлении / редактировании товара, очень много информации добавляется аяксом, к примеру те же комбинации товара. И что бы потом при сохранении товара не заносить эту всю информацию в базу, я атачу все посланные аяксом данные сразу к товару.
Сам вопрос в том, может лучше создать таблицу в базе с ид товара и ид пользователя, и удалять запись при обновлении товара? Не будит ли это лишней нагрузкой на бд?
Не в сети
да не, вроде в сессии нормально хранить всё. если хостинг простой совсем, можно и сессии в базу перенести (драйвер 'database'), может оказаться что к базе обращаться быстрее чем к файлам…
ps. единственное что надо проверить как всё работает в случае, если пользователь заполнил часть данных в форме создания продукта, они попали в сессию, пользователь закрыл форму создания продукта, ушёл на другую страницу, а потом снова нажимает «создать продукт» – что он увидит в этом случае в данных формы? как эта форма будет работать с учётом того что в сессии уже есть какие-то данные? как это всё должно работать по ТЗ/логике/здравому смыслу/ожиданиям пользователя?
Изменено constb (26.07.2017 07:26:35)
Не в сети
- ps. единственное что надо проверить как всё работает в случае, если пользователь заполнил часть данных в форме создания продукта, они попали в сессию, пользователь закрыл форму создания продукта, ушёл на другую страницу, а потом снова нажимает «создать продукт» – что он увидит в этом случае в данных формы? как эта форма будет работать с учётом того что в сессии уже есть какие-то данные? как это всё должно работать по ТЗ/логике/здравому смыслу/ожиданиям пользователя?
Спасибо за ответ.
В сессию записывается только ид товара. После того как пользователь добавил к товару к примеру название и сохранил товар, то только тогда из сессии ид товара удаляется. Таким образом получается что в базе не будит пустых товаров. Для большего понимания привожу код
/**
* Show the form for creating a new resource
*
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
// Если пользователь уже нажимал ранее "добавить товар" в базе появилась пустая запись
// И у пользователя есть ид этого товара
if($request->session()->has('empty_product_id'))
return redirect(route('products.edit', ['id' => $request->session()->get('empty_product_id')]));
$product = Product::create();
// если пользователь не имеет пустых товаров в базе, то ставим ему ид товара только что созданного
$request->session()->put('empty_product_id', $product->id);
return redirect(route('products.edit', ['id' => $product->id]));
}
/**
* Update the specified resource in storage.
*
* @param AdminProductRequest $request
* @param Product $product
* @return \Illuminate\Http\Response
*/
public function update(AdmindProductRequest $request, Product $product)
{
try
{
$product->update([
'meta_title' => $request->meta_title,
'meta_description' => $request->meta_description,
'meta_keywords' => $request->meta_keywords,
// ...
]);
// если у пользователя есть пустой товар и обновляемый товар тот же что и пустой в сессии
// То удаляем ид этого товара, так как он уже имеет записи
if($request->session()->get('empty_product_id') == $product->id)
$request->session()->forget('empty_product_id');
if($request->input('stay'))
return redirect(route('products.edit', ['id' => $product->id]))->with('success', 'Товар обновлен');
return redirect(route('products.index'))->with('success', 'Товар обновлен');
}
catch (\Throwable $t)
{
return redirect()->back()->with(['error' => 'Произошла ошибка', 'message' => $t->getMessage()])->withInput($request->input());
}
catch (\Exception $e)
{
return redirect()->back()->with(['error' => 'Произошла ошибка', 'message' => $e->getMessage()])->withInput($request->input());
}
}
Не в сети
Таким образом получается что в базе не будит пустых товаров
обязательно будут
Не в сети
Страницы 1