Laravel 5.3多数据库

时间:2016-09-23 15:25:47

标签: php laravel laravel-5.3

这可能是一个常见问题,但我已被困2天T_T

非常简单,

  • 我创建了一个新的laravel 5.3项目
  • 我删除.env文件中的db config
  • 我在config / database.php中定义了2 x db连接,如下所示:

    'connections' => [
        'web' => [
            'driver' => 'mysql',
            'host' => 'localhost',
            'port' => '3306',
            'database' => 'db_host1',
            'username' => 'username1,
            'password' =>  'secret1',
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
        'another' => [
            'driver' => 'mysql',
            'host' => 'localhost',
            'port' => '3306',
            'database' => 'db_host2',
            'username' => 'username2',
            'password' =>  'secret2',
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
    ]
    

    明确而直截了当

  • php artisan make auth

  • 修改迁移,如下所示:

    class CreateUsersTable extends Migration{
        //bla....
        public function up(){
              Schema::connection('another')->create('users', function (Blueprint $table) {
                    //bla
              }
          //bla
        }
    
    class CreatePasswordResetsTable extends Migration{
        //bla....
        public function up(){
            Schema::connection('another')->create('password_resets', function (Blueprint $table) {
            //bla
        }
        //bla
    }
    

    明确而直截了当

  • php artisan migrate - sweet,db在正确的位置创建

  • 转到registercontroller.php并修改create方法如下:

    protected function create(array $data){
      return User::create([
          'connection' => 'another',
          'name' => $data['name'],
          'email' => $data['email'],
          'password' => bcrypt($data['password']),
      ]);
    }
    
  • 我还尝试将连接放在app/User.php中,如下所示:

    class User extends Authenticatable{
        use Notifiable;
        protected $connection = 'another';
    
  • 测试注册用户 - 填写所有表单字段并提交

  • 党!错误来了:
  

SQLSTATE [42S02]:未找到基表或视图:1146表' web.users'   不存在(SQL:从users中选择count(*)作为聚合   email = my@email.com)

问题:为什么它仍然会从网络上看到'数据库连接,因为我已告诉​​使用另一个'数据库连接T_T?

我错过了什么吗?

我读过一些像以下的文档:http://fideloper.com/laravel-multiple-database-connections

但它对我没有帮助......

感谢有人在这里帮助我:)

欢呼声,

2 个答案:

答案 0 :(得分:0)

方法Schema::connection()实际上并不存在。执行此操作的理想方法是获取连接的架构构建器:

DB::connection('another')->getSchemaBuilder()->create('users', function (Blueprint $table) {
    // definitions
}

实际上有几种方法可以做到这一点,我可以全部介绍它们,但这是最简单的。

答案 1 :(得分:0)

用于验证部分。虽然您在验证部分中将连接更改为另一个,但您仍在寻找Web连接用户表,只需在RegisterController中替换以下代码,您就可以了。

return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:another.users',
            'password' => 'required|min:6|confirmed',
        ]);

unique:another.users *这部分非常重要,因为它告诉我们要使用哪个连接以及验证字段的表。

信用:laracast