同様の問題を解決するために、私はモデルクラスの形質を使用。私phpunit.xmlで
私はこのコードの私のconfig/database.phpでファイルで
<env name="DB_CONNECTION" value="sqlite_testing"/>
<env name="DB_DATABASE" value=":memory:"/>```
を持って、私はデータベースごとに設定さコネクションを持っている、とsqlite_testing接続が
をテストするために設定
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
'mysql_connection_a' => [
'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', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'mysql_connection_b' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE_B', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'mysql_connection_c' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE_C', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
次に、各接続の特性を作成して接続を設定し、関連するモデルに組み込みます。例えばUserモデルはmysql_connection_aを使用するために必要な場合、私は、形質が、この
trait ConnectionATrait
{
/**
* The database table used by the model.
*
* @var string
*/
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
if (env('APP_ENV') != 'testing') {
$this->connection = 'mysql_connection_a';
}else{
$this->connection = 'sqlite_testing';
}
}
}
ようになり、あなたのテストでの移行を使用している場合、私はまた、同様の操作を行う必要がありました
use App\Traits\ConnectionATrait;
class User extends Authenticatable
{
use Notifiable, ConnectionATrait;
モデルでConnectionATraitを使用しますアプローチを使用して、接続ごとに特性を使用します。私はそれ以下の同類は、getConnectionメソッドをオーバーライドするに見える形質を作成mysql_connection_aするため
:
trait ConnectionAConnectionTrait
{
/**
* Get the migration connection name.
*
* @return string
*/
public function getConnection()
{
if (env('APP_ENV') != 'testing') {
return 'mysql_connection_a';
}
return 'sqlite_testing';
}
}
その後の移行には、私は同じ問題を抱えていたこの
use Database\migrations\traits\ConnectionAConnectionTrait;
class CreateUsersTable extends Migration {
use ConnectionAConnectionTrait;
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::connection($this->getConnection())
->create('users', function(Blueprint $table)
{
あなたは=の値に設定するのmysqlのそれぞれ持って何を意味する:メモリを:? – Devon
関連するコード(テストと設定)を投稿してください。 –
DB_DATABASE_1、DB_DATABASE_2、DB_DATABASE_3の使用を考慮して、DB_DATABASEの代わりに大きな変更を加えたと仮定しているので、データベース設定ファイルを投稿する必要があります。 – Devon