Laravel не хранит дополнительный атрибут сеанса в базе данных

Я пытаюсь сохранить определенный атрибут в таблице сеансов пользователя, используя логику сеанса 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

0

Решение

Похоже, у вас неправильное представление о том, как работает драйвер базы данных для 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');
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]