Поиск…


Несколько соединений с базой данных

Laravel позволяет пользователю работать с несколькими подключениями к базе данных. Если вам необходимо подключиться к нескольким базам данных и заставить их работать вместе, вы можете быть уверены в настройке соединения.

Вы также можете использовать различные типы баз данных в одном приложении, если это необходимо.

Соединение по умолчанию В config/database.php вы можете увидеть вызов элемента конфигурации:

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

Это имя ссылается на имя соединения mysql :

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

Если вы не указали название соединения с базой данных в других кодах или командах, Laravel подберет имя подключения к базе данных по умолчанию. однако, в нескольких соединениях с базой данных, даже если вы настроили соединение по умолчанию, вам лучше настроить повсеместно, какое соединение с базой данных вы использовали.

Файл миграции

В файле миграции, если используется одно соединение с базой данных, вы можете использовать:

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

В нескольких подключениях к базе данных вы будете использовать метод connection() чтобы сообщить Laravel, какое соединение с базой данных вы используете:

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

Artisan Migrate

если вы используете одно соединение с базой данных, вы запустите:

php artisan migrate

Тем не менее, для множественного подключения к базе данных вам лучше указать, какое соединение с базой данных поддерживает данные миграции. поэтому вы выполните следующую команду:

php artisan migrate:install --database=sqlite

Эта команда установит таблицу миграции в целевой базе данных для подготовки миграции.

php artisan migrate --database=sqlite

Эта команда выполнит миграцию и сохранит данные миграции в целевой базе данных

php artisan migrate:rollback --database=sqlite

Эта команда выполняет откат миграции и сохраняет данные миграции в целевой базе данных

Красноречивая модель

Чтобы указать соединение с базой данных с использованием Eloquent, вам необходимо определить свойство $connection :

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

Чтобы указать другое (второе) соединение с базой данных с помощью Eloquent:

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

Laravel будет использовать свойство $connection определенное в модели, для использования указанного соединения, определенного в config/database.php . Если свойство $connection не определено в модели, будет использоваться значение по умолчанию.

Вы также можете указать другое соединение, используя метод static on :

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

Создание базы данных / запросов

Вы также можете указать другое соединение с помощью построителя запросов:

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

Модульный тест

Laravel предоставляет seeInDatabase($table,$fielsArray,$connection) для проверки кода seeInDatabase($table,$fielsArray,$connection) к базе данных. В тестовом файле Unit вам нужно сделать следующее:

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

Таким образом, Laravel будет знать, какое соединение с базой данных тестируется.

Транзакции базы данных в модульном тестировании

Laravel позволяет базе данных откатывать все изменения во время тестов. Для тестирования нескольких соединений с базами данных вам необходимо установить свойства $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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow