我有多个数据库。对于用户,记录等,我出于多个应用原因分离了用户数据库。
继承我的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并且指向存在用户表的数据库..
普通查询,雄辩和登录功能正在顺利进行..只是这个寄存器吓坏了我..
答案 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');
}
}