回答:
.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」
それでも、selectクエリはデフォルトの接続で実行されます。まだ理解しようとしていますが、Laravelが意図したとおりに機能するように説得する方法:接続を変更します。
編集:私はそれを理解しました。Laravels DatabaseManagerをデバッグした後、私のdatabase.php(構成ファイル)($ this-> app内)が間違っていることがわかりました。「接続」セクションには、「データベース」のようなものがあり、コピー元の値が含まれていました。明確に言えば、
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,
],
];
これができたら、接続ごとに2つの基本モデルクラスを作成し、それらのモデルで接続名を定義できます。
//BaseModel.php
protected $connection = 'mysql';
//BaseModelOne.php
protected $connection = 'mysqlOne';
これらのモデルを拡張して、各DBのテーブルにさらにモデルを作成できます。
class SomeModel extends Model {
し、またとしてのenvファイルから必ず削除されます値を持たせるenv('DB_DATABASE', 'name')
@sbaが述べたように、あなたがdatabase.phpでファイルに新しいDB構成配列を作成するときに