Я пытаюсь сохранить определенный атрибут в таблице сеансов пользователя, используя логику сеанса laravel.
Сессия Таблица Миграция
Schema::create('sessions', function (Blueprint $table) {
$table->string('id')->unique();
$table->unsignedInteger('user_id')->nullable();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->text('payload');
$table->text('activeEvent')->nullable();
$table->integer('last_activity');
});
ENV Config
APP_NAME=Laravel
APP_ENV=local
APP_KEY={KEY}
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=sqlite
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=database
SESSION_LIFETIME=120
Код
Route::post('/set-event', function(Request $request){
Session::put('activeEvent', $request->get('event'));
Session::save();
return redirect()->route('home');
});
Каждый атрибут в таблице сессий обновляется, но атрибут «activeEvent» всегда равен нулю.
«$ request-> get (‘event’)» возвращает целое число выбранного события. Уже попробовал, установив тип данных activeEvent в целое число.
Также попробовал это со следующими сниппетами:
$request->session()->push
$request->session()->put
$request->session()->keep
Ничего не получалось. Как я могу сохранить атрибут activeEvent в базе данных? Или это не возможно?
Я использую PHP7.2 / Laravel 5.7 / SQLITE
Похоже, у вас неправильное представление о том, как работает драйвер базы данных для Laravel Session. Каждый ряд вашего sessions
Таблица представляет все данные сеанса для одного пользователя. Когда вы делаете Session::put('activeEvent', $value);
это хранит это 'activeEvent' => $value
пара ключ / значение в payload
колонка.
Вам не нужно изменять эту таблицу, чтобы обеспечить столбцы для каждого ключа, который вы хотите сохранить — драйвер сеанса базы данных будет сериализовать все пары ключ / значение и поместить его в payload
колонка.
Так что в вашем случае, вернуться sessions
перенос таблицы в том виде, в каком она была при первом создании php artisan session:table
команда. И работать с сессией как обычно: put()
хранить, get()
читать:
Route::post('/set-event', function(Request $request){
Session::put('activeEvent', $request->get('event'));
return redirect()->route('home');
});
...
// Somewhere when you need to retrieve the value
$activeEvent = Session::get('activeEvent');
Других решений пока нет …