Szukaj…


Wiele połączeń z bazą danych

Laravel pozwala użytkownikowi pracować na wielu połączeniach z bazą danych. Jeśli musisz połączyć się z wieloma bazami danych i sprawić, by ze sobą współpracowały, musisz wystrzegać się konfiguracji połączenia.

W razie potrzeby zezwalasz również na używanie różnych typów baz danych w tej samej aplikacji.

Domyślne połączenie W config/database.php możesz zobaczyć wywołanie elementu konfiguracji:

'default' => env('DB_CONNECTION', 'mysql'),

Ta nazwa odwołuje się do nazwy połączeń mysql poniżej:

'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,
    ],
],

Jeśli nie podałeś nazwy połączenia z bazą danych w innych kodach lub poleceniach, Laravel wybierze domyślną nazwę połączenia z bazą danych. jednak w wielu połączeniach z bazą danych, nawet jeśli skonfigurujesz połączenie domyślne, lepiej skonfiguruj wszędzie to, które połączenie z bazą danych zostało użyte.

Plik migracji

W pliku migracji, jeśli jedno połączenie z bazą danych, możesz użyć:

 Schema::create("table",function(Blueprint $table){
     $table->increments('id');
});

W przypadku połączenia z wieloma bazami danych użyjesz metody connection() , aby powiedzieć Laravelowi, którego połączenia z bazą danych używasz:

 Schema::connection("sqlite")->create("table",function(Blueprint $table){
     $table->increments('id');
});

Artisan Migrate

jeśli korzystasz z pojedynczego połączenia z bazą danych, uruchomisz:

php artisan migrate

Jednak w przypadku połączenia z wieloma bazami danych lepiej jest powiedzieć, które połączenie z bazą danych obsługuje dane migracji. więc uruchomisz następujące polecenie:

php artisan migrate:install --database=sqlite

To polecenie zainstaluje tabelę migracji w docelowej bazie danych w celu przygotowania migracji.

php artisan migrate --database=sqlite

To polecenie uruchomi migrację i zapisze dane migracji w docelowej bazie danych

php artisan migrate:rollback --database=sqlite

To polecenie przywróci migrację i zapisze dane migracji w docelowej bazie danych

Elokwentny model

Aby określić połączenie z bazą danych za pomocą Eloquent, musisz zdefiniować właściwość $connection :

namespace App\Model\Sqlite;
class Table extends Model
{
    protected $table="table";
    protected $connection = 'sqlite';
}

Aby określić inne (drugie) połączenie z bazą danych za pomocą Eloquent:

namespace App\Model\MySql;
class Table extends Model
{
    protected $table="table";
    protected $connection = 'mysql';
}

Laravel użyje właściwości $connection zdefiniowanej w modelu, aby wykorzystać określone połączenie zdefiniowane w config/database.php . Jeśli właściwość $connection nie jest zdefiniowana w modelu, zostanie użyta wartość domyślna.

Możesz także określić inne połączenie za pomocą metody static on :

// Using the sqlite connection
Table::on('sqlite')->select(...)->get()
// Using the mysql connection
Table::on('mysql')->select(...)->get()

Konstruktor baz danych / zapytań

Możesz także określić inne połączenie za pomocą narzędzia do tworzenia zapytań:

// Using the sqlite connection
DB::connection('sqlite')->table('table')->select(...)->get()
// Using the mysql connection
DB::connection('mysql')->table('table')->select(...)->get()  

Test jednostkowy

Laravel zapewnia seeInDatabase($table,$fielsArray,$connection) do testowania kodu połączenia z bazą danych. W pliku testu jednostkowego musisz wykonać następujące czynności:

$this
    ->json(
        'GET',
        'result1/2015-05-08/2015-08-08/a/123'
    )
     ->seeInDatabase("log", ["field"=>"value"], 'sqlite');

W ten sposób Laravel będzie wiedział, które połączenie z bazą danych przetestować.

Transakcje bazy danych w teście jednostkowym

Laravel pozwala bazie danych cofnąć wszystkie zmiany podczas testów. Aby przetestować wiele połączeń z bazą danych, musisz ustawić właściwości $connectionsToTransact

use 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');
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow