답변:
.env
> = 5.0 (5.5 테스트)에 .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSWORD=secret
DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=secret
에 config/database.php
'mysql' => [
'driver' => env('DB_CONNECTION'),
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
],
'mysql2' => [
'driver' => env('DB_CONNECTION_SECOND'),
'host' => env('DB_HOST_SECOND'),
'port' => env('DB_PORT_SECOND'),
'database' => env('DB_DATABASE_SECOND'),
'username' => env('DB_USERNAME_SECOND'),
'password' => env('DB_PASSWORD_SECOND'),
],
참고 : 에서
mysql2
DB_username 및 DB_password가 동일한 경우, 당신은 사용할 수 있습니다env('DB_USERNAME')
에 metioned되는.env
처음 몇 줄.
.env
<5.0 없이연결 정의
app/config/database.php
return array(
'default' => 'mysql',
'connections' => array(
# Primary/Default database connection
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database1',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
# Secondary database connection
'mysql2' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database2',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
개요
사용할 연결을 지정하려면 간단히 connection()
메소드 를 실행하십시오.
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
쿼리 작성기
$users = DB::connection('mysql2')->select(...);
웅변
$connection
모델 에서 변수를 설정하십시오
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
setConnection
메소드 또는 on
정적 메소드 를 통해 런타임시 연결을 정의 할 수도 있습니다 .
class SomeController extends BaseController {
public function someMethod()
{
$someModel = new SomeModel;
$someModel->setConnection('mysql2'); // non-static method
$something = $someModel->find(1);
$something = SomeModel::on('mysql2')->find(1); // static method
return $something;
}
}
참고 데이터베이스에서 테이블과의 관계를 구축 할 때 주의 하십시오! 가능하지만 몇 가지주의 사항이 있으며 사용중인 데이터베이스 및 / 또는 데이터베이스 설정에 따라 다릅니다.
여러 데이터베이스 연결 사용
여러 연결을 사용하는 connection
경우 DB
파사드 의 연결 방법을 통해 각각에 액세스 할 수 있습니다 . name
에 전달 connection
방법은 당신에 나열된 연결 중 하나에 해당해야합니다 config/database.php
구성 파일 :
$users = DB::connection('foo')->select(...);
연결 인스턴스에서 getPdo 메소드를 사용하여 원시 기본 PDO 인스턴스에 액세스 할 수도 있습니다.
$pdo = DB::connection()->getPdo();
유용한 링크
Laravel 5.1에서 연결을 지정합니다 :
$users = DB::connection('foo')->select(...);
기본적으로 Laravel은 기본 연결을 사용합니다. 간단하지 않습니까?
자세한 내용은 여기를 참조하십시오 : http://laravel.com/docs/5.1/database#accessing-connections
DB::connection('name')->select(..)
'name'은 큰 따옴표로 묶어야하기 때문에 실제로 는 작동하지 않습니다. "name"
여전히 선택 쿼리는 기본 연결에서 실행됩니다. 여전히 알아 내려고 노력하면서 Laravel이 의도 한 방식으로 작동하도록 설득하는 방법 : 연결 변경.
편집 : 알아 냈습니다. Laravels DatabaseManager를 디버깅 한 후 내 database.php (config 파일) ($ this-> app 내부)가 잘못되었습니다. "connections"섹션에서 나는 "database"와 같은 것을 가지고 그것을 복사 한 것의 값을 가졌다. 명확한 용어 대신
env('DB_DATABASE', 'name')
나는 같은 것을 배치해야했다.
'myNewName'
모든 연결이 데이터베이스, 사용자 이름, 비밀번호 등에 대해 동일한 값으로 나열되었으므로 적어도 다른 데이터베이스 이름에 액세스하려는 경우에는 의미가 없습니다.
따라서 다른 데이터베이스에서 무언가를 선택하려고 할 때마다 항상 기본 데이터베이스가되었습니다.
Laravel은 여러 데이터베이스 시스템을 지원하며 config / database.php 파일 에 연결 세부 정보를 제공해야 합니다.
return [
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
'mysqlOne' => [
'driver' => 'mysql',
'host' => env('DB_HOST_ONE', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE_ONE', 'forge'),
'username' => env('DB_USERNAME_ONE', 'forge'),
'password' => env('DB_PASSWORD_ONE', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
];
이 기능이 있으면 각 연결에 대해 두 개의 기본 모델 클래스를 작성하고 해당 모델에서 연결 이름을 정의 할 수 있습니다
//BaseModel.php
protected $connection = 'mysql';
//BaseModelOne.php
protected $connection = 'mysqlOne';
이러한 모델을 확장하여 각 DB에서 테이블에 대한 더 많은 모델을 만들 수 있습니다.
class SomeModel extends Model {
또한 당신이 같은 ENV 파일에서 제거 GET 값이 있는지 확인env('DB_DATABASE', 'name')
@sba 언급 한대로 database.php 파일에 새로운 DB 구성 배열을 만들 때