首页 > 解决方案 > Laravel PHPUnit- 用于多个连接的 SQLite 内存数据库

问题描述

我的应用程序必须使用两个数据库连接,称为 mysql1 和 mysql2。User 模型在第一个连接上,Department 模型在第二个连接上。

两者之间存在关系,一个部门属于ToMany Users。该关系使用存储在 mysql2 数据库中的 department_user 数据透视表。

这很好用,除非是在测试方面。我正在使用 PHPUnit 并将 DB_DRIVER 设置为 sqlite 并将 DB_DATABASE 设置为 :memory: 以便测试运行得更快并且不会触及实际的 MySQL 数据库。

如何使内存数据库与多个连接一起工作?有没有办法给他们每个人一个唯一的名字?

phpunit 返回的错误是 table not found,表示它无法连接第二个数据库。

标签: laravelsqliteeloquentphpunit

解决方案


我遇到了一些类似的问题。这可能是可能的,但我最终放弃了使用:memory:本地文件来代替我的 SQLite 数据库。然后我就有机会按照你的建议给他们起独特的名字。

此外,为了让每个数据库都知道另一个数据库以便于您的数据透视表,您将不得不让您的测试ATTACH DATABASE '$database' AS $name在查询将要发起的那个上执行。并确保您没有在事务中执行该语句,否则它将不起作用。

在这里查看我的答案:Laravel 中的 belongsToMany 关系跨多个数据库。我认为这与您正在寻找的内容相符。


推荐阅读