This draft deletes the entire topic.
Examples
-
Laravel allows user work on multiple database connections. If you need to connect to multiple databases and make them work together, you are beware of the connection setup.
You also allow using different types of database in the same application if you required.
Default connection In config/database.php, you can see the configuration item call:
'default' => env('DB_CONNECTION', 'mysql'),
This name references the connections' name
mysql
below:'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'database' => database_path('database.sqlite'), 'prefix' => '', ], 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), '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, ], ],
If you did not mention the name of database connection in other codes or commands, Laravel will pick up the default database connection name. however, in multiple database connections, even you setup the default connection, you've better setup everywhere which database connection you used.
Migration file
In migration file, if single database connection, you can use:
Schema::create("table",function(Blueprint $table){ $table->increments('id'); });
In multiple database connection, you will use the connection() method to tell Laravel which database connection you use:
Schema::connection("sqlite")->create("table",function(Blueprint $table){ $table->increments('id'); });
Artisan Migrate
if you use single database connection, you will run:
php artisan migrate
However, for multiple database connection, you've better tell which database connection maintains the migration data. so you will run the following command:
php artisan migrate:install --database=sqlite
This command will install migration table in the target database to prepare migration.
php artisan migrate --database=sqlite
This command will run migration and save the migration data in the target database
php artisan migrate:rollback --database=sqlite
This command will rollback migration and save the migration data in the target database
Eloquent Model
To specify a database connection using Eloquent, you need to define the
$connection
property:namespace App\Model\Sqlite; class Table extends Model { protected $table="table"; protected $connection = 'sqlite'; }
To specify another ( second ) database connection using Eloquent:
namespace App\Model\MySql; class Table extends Model { protected $table="table"; protected $connection = 'mysql'; }
Laravel will use
$connection
property defined in a model to utilize the specified connection defined inconfig/database.php
. If the$connection
property is not defined in a model the default will be used.You may also specify another connection using the static
on
method:// Using the sqlite connection Table::on('sqlite')->select(...)->get() // Using the mysql connection Table::on('mysql')->select(...)->get()
Database/Query Builder
You may also specify another connection using the query builder:
// Using the sqlite connection DB::connection('sqlite')->table('table')->select(...)->get() // Using the mysql connection DB::connection('mysql')->table('table')->select(...)->get()
Unit Test
Laravel provide
seeInDatabase($table,$fielsArray,$connection)
to test database connection code. In Unit test file, you need to do like:$this ->json( 'GET', 'result1/2015-05-08/2015-08-08/a/123' ) ->seeInDatabase("log", ["field"=>"value"], 'sqlite');
In this way, Laravel will know which database connection to test.
Database Transactions in Unit Test
Laravel allows database to rollback all the change during the tests. For testing multiple database connections, you need to set
$connectionsToTransact
propertiesuse Illuminate\Foundation\Testing\DatabaseMigrations; class ExampleTest extends TestCase { use DatabaseTransactions; $connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack public function testExampleIndex() { $this->visit('/action/parameter') ->see('items'); } }
Sign up or log in
Save edit as a guest
Join Stack Overflow
Using Google
Using Facebook
Using Email and Password
We recognize you from another Stack Exchange Network site!
Join and Save Draft