【问题标题】:Laravel 5.0 switching from default database to another to use on all views and controllersLaravel 5.0 从默认数据库切换到另一个以在所有视图和控制器上使用
【发布时间】:2016-05-23 00:01:44
【问题描述】:

我在切换数据库时遇到了问题。 我在 config.database 文件中将数据库“A”设置为默认值;除此之外,我在连接数组中有一个数据库“B”。

'default' => "A",

....

    'connections' => [

        'A' => [
             'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
        ],

        'B' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST_1', 'localhost'),
            'database'  => env('DB_DATABASE_1', 'forge'),
            'username'  => env('DB_USERNAME_1', 'forge'),
            'password'  => env('DB_PASSWORD_1', ''),
       ],
.....

当我在控制器中登录并转到 POST 登录方法时,我切换到数据库“B”

\Config::set('database.default', "B");

使用“用户”表并获取登录凭据。

if(\Auth::attempt(array('username'=>$username , 'password'=>$password) ) )...

它工作正常。然而,当我去一个不同的blade.php 我将从位于默认连接 ("A") 上的 "USER" 表而不是位于 B 中的 USER 表中获取凭据

所以当我这样做时

echo Auth::user()->firstName()." - ".Auth::user()->id; 
//it will display  Carlos - 10 instead of displaying Luis - 10

所以我猜它正在寻找 id=10 但在表 A(默认连接)而不是 B(我使用 Config::set() 切换的那个...

我也尝试将 Config::set('database.default', "B") 放在每个视图上,但它仍然为我提供了表 A 中的凭据 有什么帮助吗? 如何永久更改数据库? 顺便说一句,为什么我必须调用 2 个数据库来获取用户凭据?好吧,因为在我的登录表单上,我输入了公司名称(A 或 B)。

【问题讨论】:

  • 你说的新视图也是指新的请求吗?
  • 哦,我是说我成功登录的时候if(\Auth::attempt(array('username'=>$username , 'password'=>$password) ) ) { return view('test'); }

标签: database laravel connection


【解决方案1】:

尝试像这样更改连接:

DB::setDefaultConnection('A');

【讨论】:

  • 我刚刚将它添加到我的登录控制器,但没有运气。顺便说一句,我正在使用雄辩。我只是注意到如果我转到APP > user.php 并将protected $table = 'User'; 更改为 USER 类中的受保护$table = 'B.User';,它会起作用,但是如何从 LoginController 更改它?
猜你喜欢
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多