Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 25.07.2017 17:59:47

Посоветуйте где лучше хранить в базе или в сессии?

Добрый день.
Захожу в индекс где отображаются все товары. При переходе по ссылке для добавления товара products/create создается запись в таблице с товарами, с дефолтными значениями (посути пустая запись), пользователю в сессию ставится ид только что созданного товара, и происходит редирект на редактирование только что созданного товара products/n/edit. Если пользователь заполнил инфу в товаре и товар успешно сохранился, то ид данного товара из сессии стирается.
Сразу обьясню для чего я это делаю:
При добавлении / редактировании товара, очень много информации добавляется аяксом, к примеру те же комбинации товара. И что бы потом при сохранении товара не заносить эту всю информацию в базу, я атачу все посланные аяксом данные сразу к товару.

Сам вопрос в том, может лучше создать таблицу в базе с ид товара и ид пользователя, и удалять запись при обновлении товара? Не будит ли это лишней нагрузкой на бд?

Не в сети

#2 26.07.2017 07:23:44

Re: Посоветуйте где лучше хранить в базе или в сессии?

да не, вроде в сессии нормально хранить всё. если хостинг простой совсем, можно и сессии в базу перенести (драйвер 'database'), может оказаться что к базе обращаться быстрее чем к файлам…

ps. единственное что надо проверить как всё работает в случае, если пользователь заполнил часть данных в форме создания продукта, они попали в сессию, пользователь закрыл форму создания продукта, ушёл на другую страницу, а потом снова нажимает «создать продукт» – что он увидит в этом случае в данных формы? как эта форма будет работать с учётом того что в сессии уже есть какие-то данные? как это всё должно работать по ТЗ/логике/здравому смыслу/ожиданиям пользователя?

Изменено constb (26.07.2017 07:26:35)

Не в сети

#3 26.07.2017 09:57:05

Re: Посоветуйте где лучше хранить в базе или в сессии?

  1. ps. единственное что надо проверить как всё работает в случае, если пользователь заполнил часть данных в форме создания продукта, они попали в сессию, пользователь закрыл форму создания продукта, ушёл на другую страницу, а потом снова нажимает «создать продукт» – что он увидит в этом случае в данных формы? как эта форма будет работать с учётом того что в сессии уже есть какие-то данные? как это всё должно работать по ТЗ/логике/здравому смыслу/ожиданиям пользователя?

Спасибо за ответ.
В сессию записывается только ид товара. После того как пользователь добавил к товару к примеру название и сохранил товар, то только тогда из сессии ид товара удаляется. Таким образом получается что в базе не будит пустых товаров. Для большего понимания привожу код

PHP
    /**
     * 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]));
    }

Заносим в базу

PHP
    /**
     * Update the specified resource in storage.
     *
     * @param  AdminProductRequest  $request
     * @param  Product $product
     * @return \Illuminate\Http\Response
     */
    
public function update(AdmindProductRequest $requestProduct $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());
        }
    }

Не в сети

#4 26.07.2017 16:32:17

Re: Посоветуйте где лучше хранить в базе или в сессии?

Таким образом получается что в базе не будит пустых товаров

обязательно будут smile

Не в сети

Подвал раздела