Laravel PHPUnit - база данных SQLite в памяти для нескольких соединений - PullRequest
0 голосов
/ 05 июня 2018

Мое приложение должно использовать два подключения к базе данных, которые называются mysql1 и mysql2.Модель User находится на первом соединении, а модель Department - на втором.

Между этими двумя понятиями существует связь, так как Department принадлежит ToMany Users.В связи используется сводная таблица Department_user, которая хранится в базе данных mysql2.

Это прекрасно работает, за исключением случаев, когда речь идет о тестировании.Я использую PHPUnit и устанавливаю для DB_DRIVER значение sqlite, а для DB_DATABASE -: memory: чтобы тест выполнялся быстрее и не затрагивал действительные базы данных MySQL.

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

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

1 Ответ

0 голосов
/ 06 июня 2018

Я столкнулся с некоторыми похожими проблемами.Это может быть возможно, но я в итоге отказался от использования :memory: вместо локального файла для моих баз данных SQLite.Тогда у меня была бы возможность дать им уникальные имена, как вы предлагаете.

Кроме того, для того, чтобы каждая база данных была осведомлена о другой для ваших сводных таблиц, вы получитечтобы ваш тест выполнялся ATTACH DATABASE '$database' AS $name на том, с которого будет происходить запрос.И убедитесь, что вы не выполняете этот оператор внутри транзакции, иначе он не будет работать.

Ознакомьтесь с моим ответом здесь: отношение ownToMany в Laravel для нескольких баз данных .Я думаю, что это соответствует тому, что вы ищете.

...