在Laravel 5.8中,当使用会话时,与Laravel 5.7相比,对数据库执行了两个额外的查询。
Laravel 5.7
select * from `sessions` where `id` = '00kaQxJLG6roUAp9DaCui7esa31sbthHqEzwW62H' limit 1
Laravel 5.8
select * from `sessions` where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD' limit 1
update `sessions` set `payload` = 'YTozOntzOjY6Il90b2tlbiI7czo0MDoiQm12QlFHNzVNRVpZcTRkMWZwcmNMS2kwcm12czlvZkpXZUg0cFpEQyI7czo5OiJfcHJldmlvdXMiO2E6MTp7czozOiJ1cmwiO3M6MTY6Imh0dHA6Ly9kZXYubG9jYWwiO31zOjY6Il9mbGFzaCI7YToyOntzOjM6Im9sZCI7YTowOnt9czozOiJuZXciO2E6MDp7fX19', `last_activity` = 1559161593, `user_id` = '', `ip_address` = '127.0.0.1', `user_agent` = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.86 Chrome/73.0.3683.86 Safari/537.36' where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD'
select * from `sessions` where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD' limit 1
新安装。没有包裹。
发布于 2019-05-30 05:48:39
解析的
在Laravel 5.8中更改了中间件
Illuminate/Session/Middleware/StartSession.php
在方法句柄中添加了
$this->saveSession($request);
如果已配置会话,则会在数据库中对其进行更新。
在Laravel 5.7中,仅在cookies中。
发布于 2019-05-30 05:26:51
您已经编写了两次相同的查询。
select * from `sessions` where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD' limit 1
您可以通过将此查询初始化为一个变量,然后在需要时使用该变量来解决此问题。
$session = select * from `sessions` where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD' limit 1;
这应该会删除重复项。
雄辩中的查询
$session = Session::query()->where('id','anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD')->take(1)->get();
https://stackoverflow.com/questions/56368161
复制相似问题