Laravel。用户注册在其他数据库中

时间:2016-04-22 05:46:13

标签: php mysql sql-server laravel

我有多个数据库。对于用户,记录等,我出于多个应用原因分离了用户数据库。

继承我的database.php

'default' => 'main_db',

'connections' => [
    'auth_db' => [
        'driver'   => 'sqlsrv',
        'host'     => env('DB_HOST', 'MYLAPTOP\SQLEXPRESS'),
        'database' => env('DB_DATABASE', 'auth_db'),
        'username' => env('DB_USERNAME', 'sa'),
        'password' => env('DB_PASSWORD', '1234'),
        'charset'  => 'utf8',
        'prefix'   => '',
    ],
    'main_db' => [
        'driver'   => 'sqlsrv',
        'host'     => env('DB_HOST', 'MYLAPTOP\SQLEXPRESS'),
        'database' => env('DB_DATABASE', 'main_db'),
        'username' => env('DB_USERNAME', 'sa'),
        'password' => env('DB_PASSWORD', '1234'),
        'charset'  => 'utf8',
        'prefix'   => '',
    ],
],

User.php模型。

class User extends Authenticatable
{

    protected $fillable = [
        'name', 'email', 'password',
    ];

    protected $connection = 'auth_db';

    protected $hidden = [
        'password', 'remember_token',
    ];
}

AuthController.php,仅在php artisan make:auth

之后做了一些更改
class AuthController extends Controller
    {


    use AuthenticatesAndRegistersUsers, ThrottlesLogins;


    protected $redirectTo = '/';

    protected $username = 'username';

    public function __construct()
    {
        $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
    }


    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'username' => 'required',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:4|confirmed',
        ]);
    }


    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}

问题是当我通过/ register route添加新用户时..它会说找不到'用户'的对象。因为users表在'auth_db'中,看起来laravel的注册仍然指向'main_db',即使模型中已存在$ connection并且指向存在用户表的数据库..

普通查询,雄辩和登录功能正在顺利进行..只是这个寄存器吓坏了我..

1 个答案:

答案 0 :(得分:1)

尝试一次此方法:

<?php
return array(

'default' => 'mysql',

'connections' => array(

    # Our primary database connection
    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'host1',
        'database'  => 'database1',
        'username'  => 'user1',
        'password'  => 'pass1'
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

    # Our secondary database connection
    'mysql2' => array(
        'driver'    => 'mysql',
        'host'      => 'host2',
        'database'  => 'database2',
        'username'  => 'user2',
        'password'  => 'pass2'
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
),
);

在控制器中:

$users = DB::connection('mysql2')->create([
        'name' => $data['name'],
        'username' => $data['username'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);

<强>锋

您还可以定义在Eloquent模型中使用的连接!

class SomeModel extends Eloquent {

protected $connection = 'mysql2';

}

您还可以通过setConnection方法

在运行时定义连接
<?php

class SomeController extends BaseController {

public function someMethod()
{
    $someModel = new SomeModel;

    $someModel->setConnection('mysql2');

}

}