Laravel Config::set 通过请求持续存在?

2023-12-14

我一直在构建一个跟踪统计数据的网络应用程序。 这些统计数据可能存在于不同公司之间。
我决定使用一个主数据库来容纳所有登录凭据,每个公司都有一个单独的数据库。
用户登录后,他们将被重定向到此功能...

/**
* Redirects the user to the appropriate sub link
*/
public function redirect()
{
    Config::set('database.connections.club.database', Auth::user()->club->db_name);
    if (Auth::user()->person->role_id == 4) {
        return Redirect::to('employee/club_manager/home');
    }
}

此函数将称为俱乐部数据库的辅助数据库配置设置为等于用户关联的俱乐部。

但是,当我稍后尝试访问此配置时......

/**
* Handle an incoming request.
*
* @param  \Illuminate\Http\Request $request
* @param  \Closure $next
* @return mixed`enter code here`
*/
public function handle($request, Closure $next)
{
    dd(Config::get('database.connections.club.database'));
    if (Auth::user()->role->id == 4)
        return $next($request);
}

dd() 将返回“”,这是我在database.php 文件中设置的默认设置。

我的问题是,如何跨请求保存配置设置,因为 Config::set 似乎只保存单个请求的设置。


在OP的请求之后,我提交了第二个答案作为不同的方法。

如果这仅用于数据库连接详细信息,您可以在单个 Laravel 应用程序中使用以下方法与多个数据库连接。

In app/config/database.php您定义了两个不同的连接。一个用于您的主数据库,您的users存储表并为每个客户端实例提供一个动态表:

'default' => 'mysql_main',
'connections' => [

    'mysql_main' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],

    'mysql_company' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => Auth::user()->club->db_name,
        'username' => Auth::user()->club->db_user,
        'password' => Auth::user()->club->db_pass,
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],

],

正如您所看到的,您实际上不需要从配置文件中读取第二个连接的连接详细信息(它仍然用于获取主数据库的主机、端口和任何常见详细信息),您可以动态传递不同的连接详细信息来自您登录的用户。然而,这将要求您提前为每个用户创建所有数据库。

成功连接到两个数据库后,每次执行查询时都必须选择活动连接。

希望 Schema Builder、Query Builder 和 Eloquent 支持开箱即用:

舍玛生成器

Schema::connection('mysql_company')->create('statisticA', function($table)
{
    $table->increments('id'):
});

查询生成器

$companyStatA = DB::connection('mysql_company')->select(...);

雄辩模型

class StatisticA extends Eloquent {

    protected $connection = 'mysql_company';

}

控制器

class SomeController extends BaseController {

    public function someMethod()
    {
        $statA = new StatisticA;

        $statA->setConnection('mysql_company');

        $something = $statA->find(1);

        return $something;
    }

}

然而,棘手的是定义存储在不同数据库中的模型之间的关系。这是可能的,但它很大程度上取决于您的数据库驱动程序和设置。

我怀疑它能否在不同类型的数据库之间正常运行(例如,MySQL 作为您的主数据库,PostgreSQL 作为您公司的数据库),所以我建议您坚持使用 MySQL 并看看情况如何。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel Config::set 通过请求持续存在? 的相关文章

  • Laravel 雄辩的 withCount() 应该比 with() 慢

    所以我问这个的原因是在我当前的应用程序中withCount 与仅通过以下方式获取关系的所有数据相比 响应时间几乎增加了三倍with 并只是从前端获取长度 javascript 我认为使用的要点withCount 是为了加快查询速度 但也许我
  • /bootstrap/start.php 中的 Laravel 错误:\Illuminate\Foundation\Application 未找到

    因此 我在开发服务器上安装了 Laravel php5 5 3 标准安装 安装了 mcrypt 并收到以下错误消息 Fatal error Class Illuminate Foundation Application not found
  • 使用 laravel 检查活动用户状态

    这是非常标准的登录功能和验证 效果很好 但我还想检查用户是否处于活动状态 我在用户表中设置了一列 并将 活动 设置为 0 或 1 public function post login input Input all rules array
  • Laravel 5.4 密码重置

    我有一个 Laravel 5 4 应用程序 我的管理区域中有一个视图 允许我查看所有用户 我想创建一个功能 允许我单击后端的按钮 自动发送默认 Laravel 密码重置功能的过程 在我看来 我有以下几点 table class table
  • Codeception API 测试响应返回“N/A”

    我正在使用 Laravel 和 Codeception 作为测试框架编写 API 我无法让 Codeception 返回响应代码 我可以从 Codeception 获取响应代码 以及 JSON 响应 我编写了一个简单的测试来从 GET 请求
  • 在 Laravel 中使用块或游标优化代码

    我有Company型号和Contact我的模型中定义的Laravel 5 4应用程序中 两者具有多对多的关系 因此 例如联系人模型具有 public function company return this gt belongsToMany
  • Slack Webhook - 获取 Invalid_Payload

    我正在尝试设置 Slack 的 Webhook 但收到 Invalid Payload 错误消息 我浏览过 Stack Slack 和 Github 但找不到我想要的答案 为了保护隐私 其中的 自定义链接 正在使用实际链接 CODE var
  • Laravel Blade - 链/嵌入多种布局

    在我最喜欢的模板框架中 它们通常具有嵌套布局的能力 这在 Blade 中是可能的吗 例如 master blade php yield content 导航 blade php extend master
  • 我可以在 Laravel 5.2 中创建一个继承自 User 的新类吗?

    我对 Laravel 还很陌生 使用的是迄今为止的最新版本 5 2 因此我遇到了以下困境 我知道 Laravel 附带了一个User开箱即用的类 但我想开发一个系统 在其中我可以有另外两种类型的用户 称为Researcher and Adm
  • 如何使用 Laravel Mix 和 WorkBox?

    我正在尝试为我的应用程序构建一个 PWA 并花了近 48 小时试图弄清楚如何将 Workbox 与 Laravel Mix 结合使用 具有讽刺意味的是 谷歌说 Workbox 是为了让事情变得简单 Buh 好吧 到目前为止我已经弄清楚了 我
  • Guice:Binder#bindConstant() 和 Binder#bind() 之间的区别 ... toInstance

    我想问一下有什么区别 bindConstant annotatedWith Names named keepAliveInterval to 60 and bind Integer TYPE annotatedWith Names name
  • Laravel 转义 Blade 模板中的所有 HTML

    我正在 Laravel 中构建一个小型 CMS 并尝试显示内容 存储在数据库中 它显示 HTML 标签而不是执行它们 就像所有打印数据都有一个自动 html entity decode 一样
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • Apache 虚拟主机始终重定向到 /dashboard

    我遇到的问题似乎是一个常见问题 但我找到的任何解决方案似乎都不适合我的情况 我正在尝试设置一个虚拟主机 以便我可以通过 mytestdomain local 访问我的 Laravel 安装的公共文件 但是当我在 google chrome
  • NodeJs 环境变量与配置文件

    实际上 我有一个 NodeJS Express 应用程序 其配置文件包含主机 端口 JWT 令牌 数据库参数等参数 问题是 将这些参数直接保留在环境变量上 没有任何配置文件 并访问它们 而不需要在所有组件和模块中进行 require 配置是
  • Laravel Vue js spa 应用程序

    1 我想知道为什么人们使用两台服务器用 laravel 制作 vuejs SPA 我想我们可以用另一种方式 制定这样的路线 Route get any function return view index gt where any 并让 v
  • 如果您编辑/更新该特定对象,laravel 唯一名称表示已被占用

    我有一个投资组合表 我没有在 url 中显示投资组合的 id 而是使用 getRouteKeyName 显示投资组合的名称 所以我希望该名称是唯一的 否则如果它已经存在 它可能会显示错误的投资组合 我将名称字段的规则设置为唯一 如果我现在编
  • 如何从导出的 csv 文件中删除双引号

    我正在使用 Laravel 5 8 并且添加了 Maatwebsite 包 用于从数据库表导出 CSV 文件 这是我导出的类 class ConfirmedExport implements FromCollection WithHeadi
  • Laravel 路由中的“as”关键字是什么意思?

    据我从 Laravel 文档中了解到 它用于重定向 但也许我错了 I wrote Route get user profile as gt profile function echo some text 然后我期望我的 URL 重定向自ht
  • Laravel 按动态 ID 数组对集合进行排序 [重复]

    这个问题在这里已经有答案了 我有以下 people array 5 2 9 6 11 people collection People find people 但当我倾倒并死去时 people collection集合按 ID ASC 排序

随机推荐