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

1 ответ

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