Laravel 5.3 多数据库
Laravel 5.3 multi database
这可能是个常见问题,但我已经卡了 2 天了T_T
很简单,
- 我创建了一个新的 laravel 5.3 项目
- 我删除了 .env 文件中的数据库配置
我在 config/database.php 中定义了 2 个数据库连接,如下所示:
'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 - 亲爱的,在正确的地方创建了数据库
转到registercontroller.php并修改创建方法如下:
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]: Base table or view not found: 1146 Table 'web.users'
doesn't exist (SQL: select count(*) as aggregate from users
where
email
= my@email.com)
问题:为什么它仍然从 'web' 数据库连接中查找,因为我告诉过要使用 'another' 数据库连接 T_T?
我错过了什么吗?
我读过一些文档,例如:http://fideloper.com/laravel-multiple-database-connections
但这对我没有帮助...
如果有人能在这里帮助我,我将不胜感激:)
干杯,
方法Schema::connection()
实际上并不存在。执行此操作的理想方法是获取连接的架构构建器:
DB::connection('another')->getSchemaBuilder()->create('users', function (Blueprint $table) {
// definitions
}
实际上有几种方法可以做到这一点,我可以一一介绍,但这是最简单的。
用于验证部分。尽管您在验证部分更改了另一个连接,但您仍在寻找网络连接用户 table 只需替换 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 *这部分很重要,因为它告诉要使用哪个连接以及验证字段的 table。
学分:laracast
这可能是个常见问题,但我已经卡了 2 天了T_T
很简单,
- 我创建了一个新的 laravel 5.3 项目
- 我删除了 .env 文件中的数据库配置
我在 config/database.php 中定义了 2 个数据库连接,如下所示:
'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 - 亲爱的,在正确的地方创建了数据库
转到registercontroller.php并修改创建方法如下:
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]: Base table or view not found: 1146 Table 'web.users' doesn't exist (SQL: select count(*) as aggregate from
users
where
问题:为什么它仍然从 'web' 数据库连接中查找,因为我告诉过要使用 'another' 数据库连接 T_T?
我错过了什么吗?
我读过一些文档,例如:http://fideloper.com/laravel-multiple-database-connections
但这对我没有帮助...
如果有人能在这里帮助我,我将不胜感激:)
干杯,
方法Schema::connection()
实际上并不存在。执行此操作的理想方法是获取连接的架构构建器:
DB::connection('another')->getSchemaBuilder()->create('users', function (Blueprint $table) {
// definitions
}
实际上有几种方法可以做到这一点,我可以一一介绍,但这是最简单的。
用于验证部分。尽管您在验证部分更改了另一个连接,但您仍在寻找网络连接用户 table 只需替换 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 *这部分很重要,因为它告诉要使用哪个连接以及验证字段的 table。
学分:laracast