在 Laravel 中操作多个数据库
方式1:多个 connection
适用于:
不同数据库服务器
不同账号权限
云数据库(RDS 等)
1. 配置
.env:
DB_CONNECTION=mysql
DB_DATABASE=main_db
DB_SECOND_DATABASE=log_db
config/database.php:
'connections' => [
'mysql' => [
'driver' => 'mysql',
'database' => env('DB_DATABASE'),
// ...
],
'mysql2' => [
'driver' => 'mysql',
'database' => env('DB_SECOND_DATABASE'),
// ...
],
],
2. 使用
Query Builder
use Illuminate\Support\Facades\DB;
DB::connection('mysql2')->table('logs')->get();
Eloquent(推荐)
class Log extends Model
{
protected $connection = 'mysql2';
}
方式2:同 connection 跨库
前提:
同一个 MySQL 实例
同一个账号
有权限访问多个 DB
1. 直接用 db.table
DB::table('other_db.logs')->get();2. Eloquent
class Log extends Model
{
protected $table = 'other_db.logs';
}
3. 跨库 JOIN
DB::table('main_db.users as u')
->join('other_db.logs as l', 'u.id', '=', 'l.user_id')
->get();
优点
不需要多个 connection
性能好(同一个连接)
支持事务