Доступ к таблице базы данных тестирования Laravel одобряется другими пользователямиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Доступ к таблице базы данных тестирования Laravel одобряется другими пользователями

Сообщение Anonymous »

В настоящее время я строю многоцелевое приложение с использованием Stancl/Lenacing (каждый арендатор использует свою собственную базу данных) в моем приложении Laravel.

Код: Выделить всё

Illuminate\Database\QueryException: SQLSTATE[55006]: Object in use: 7 FEHLER:  auf Datenbank »tenant_019949ce« wird von anderen Benutzern zugegriffen
DETAIL:  1 andere Sitzung verwendet die Datenbank. (Connection: tenant_host_connection, SQL: DROP DATABASE "tenant_019949ce")
< /code>
Что означает, что таблица используется другим пользователем. Таблицы создаются при создании арендатора и должны быть удалены, если арендатор удаляется, но он всегда терпит неудачу в методе Teardown 
.
Мои тесты расширяют TenacyTestCase класс:

Код: Выделить всё

use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

class TenancyTestCase extends BaseTestCase {

use RefreshDatabase;

private Tenant $tenant;

protected function setUp(): void {
parent::setUp();

Config::set('tenancy.seeder_parameters.--class', TestDatabaseSeeder::class);

$this->setupDefaultTenant();
$this->forceRootUrl();

$this->withoutVite();
}

private function setupDefaultTenant(): void {

$this->tenant = Tenant::factory()->create();
$this->tenant->domains()->save(Domain::factory([
'domain' => 'tenant',
])->make());

tenancy()->initialize($this->tenant);
}

private function forceRootUrl(): void {
$parsed = parse_url(config('app.url'));
$host = $parsed['host'] ?? 'localhost.test';
$port = isset($parsed['port']) ? ':' . $parsed['port'] : '';

URL::forceRootUrl('https://tenant.' . $host . $port);
}

public function tearDown(): void {
tenancy()->end();
$this->tenant->delete();

parent::tearDown();
}
}
< /code>
Я не смог выяснить, почему еще какие -либо идеи о том, как это исправить? Это работает нормально, но база данных все равно будет сохраняться, что я не хочу. Но тесты успешны. Так как правильно удалить базу данных? < /P>
Events\TenantDeleted::class => [
JobPipeline::make([
Jobs\DeleteDatabase::class,
])->send(function(Events\TenantDeleted $event) {
return $event->tenant;
})->shouldBeQueued(true),
],
Я также обнаружил, что каждая база данных арендаторов, которая создается во время самого теста (не в настройке ) Get обрабатывается и удаляется правильно. Но не оригинал.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ther-users
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»