Laravel 模型工厂没有连接到数据库

     2023-02-16     113

关键词:

【中文标题】Laravel 模型工厂没有连接到数据库【英文标题】:Laravel Model Factory without connection to database 【发布时间】:2016-12-17 09:07:17 【问题描述】:

我想在一些 PHPUnit 测试中使用 Laravel 的模型工厂。我唯一想做的就是创建一个模型实例而不将其保存到数据库中。

为什么模型工厂需要连接到数据库?这些测试必须在没有配置数据库的 CI 环境中通过。

当我通过new App\Model($dataArray) 手动创建模型时,测试通过并且不需要连接。

我在其他地方使用模型工厂,所以我想在测试中重用它,以避免代码重复。

我正在使用 MongoDB 和 jenssegers/laravel-mongodb 库,但我猜这无关紧要 - 在纯 Eloquent 中,例如MySQL 数据库,问题应该是一样的。

在没有数据库的情况下工作的测试:

class ModelTransformerTest extends TestCase

    public function testTransformMinimalModelData()
    
        $data = [
            '_id' => $faker->md5,
            'email' => $faker->email,
        ];

        $model = new App\Model($data);
        // […];
    

我的模型工厂

$factory->defineAs(Model::class, 'base', function ($faker) 
    return [
        '_id' => $faker->md5,
        'email' => $faker->email,
    ];
);

需要连接数据库的测试:

class ModelTransformerTest extends TestCase

    public function testTransformMinimalModelData()
    
        $model = factory(App\Model::class, 'base')->make();
        // […];
    

完整的堆栈跟踪:

Error: Class 'MongoDB\Driver\Manager' not found

app\vendor\mongodb\mongodb\src\Client.php:56
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Connection.php:147
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Connection.php:37
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\MongodbServiceProvider.php:27
app\vendor\illuminate\database\DatabaseManager.php:173
app\vendor\illuminate\database\DatabaseManager.php:68
app\vendor\illuminate\database\Eloquent\Model.php:3282
app\vendor\illuminate\database\Eloquent\Model.php:3248
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Eloquent\Model.php:523
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Eloquent\Model.php:284
app\vendor\illuminate\database\Eloquent\Model.php:443
app\vendor\illuminate\database\Eloquent\Model.php:281
app\vendor\illuminate\database\Eloquent\FactoryBuilder.php:142
app\vendor\illuminate\database\Eloquent\Model.php:2286
app\vendor\illuminate\database\Eloquent\FactoryBuilder.php:143
app\vendor\illuminate\database\Eloquent\FactoryBuilder.php:106
app\tests\phpunit\Transformers\ModelTransformerTest.php:25
\php\pear\PHPUnit\TextUI\Command.php:176
\php\pear\PHPUnit\TextUI\Command.php:129

【问题讨论】:

您可以为此使用 SQLite。 Laravel 提供了在内存中创建 SQLite DB 的选项。所以从技术上讲,你有一个数据库,但它不会填充你的 MongoDB 或 MySQL 等。一旦测试完成,数据库就会从内存中删除 【参考方案1】:

您是否尝试使用 DatabaseTransactions

例如

use Illuminate\Foundation\Testing\DatabaseTransactions;
class ModelTransformerTest extends TestCase

    use DatabaseTransactions;

【讨论】:

【参考方案2】:

我通常会创建一个类似的测试数据库并在该数据库上运行所有测试。

它确保您的测试数据库类型与生产数据库类型相同,并且您不会接触生产数据库来运行测试。

【讨论】:

【参考方案3】:

我认为目前这是不可能的。 make() 方法调用 newModelInstance() 尝试设置数据库连接。

您可以自己查看source code。

【讨论】:

Laravel 8 基于类的模型工厂

】Laravel8基于类的模型工厂【英文标题】:Laravel8ClassBasedModelFactories【发布时间】:2020-12-2821:56:13【问题描述】:我试图弄清楚为什么当我尝试创建我的Player类和dd($this)的工厂时,它会返回,因为它没有覆盖模型的状态。同样没... 查看详情

向 Laravel 工厂模型添加关系

...题描述】:我正在尝试添加与工厂模型的关系以执行一些数据库播种,如下所示-请注意,我正在尝试为每个用户添加2个帖子publicfunctionrun()factory(App\\User::class,50)->create()->each(functio 查看详情

Laravel - 尝试将项目连接到数据库的问题

】Laravel-尝试将项目连接到数据库的问题【英文标题】:Laravel-Issuestryingtoconnectprojecttodatabase【发布时间】:2018-10-1500:13:05【问题描述】:我正在尝试将laravel连接到数据库,但我遇到了问题。我收到以下错误:1PDOException::("SQLSTATE[... 查看详情

无法将 Laravel 连接到 MailChimp(laravel 5.4)

】无法将Laravel连接到MailChimp(laravel5.4)【英文标题】:UnableToConnectLaraveltoMailChimp(laravel5.4)【发布时间】:2017-12-0805:37:11【问题描述】:我必须在我的.env文件中定义列表ID和MailChimpAPI密钥。我确定两者都很好,即使我没有收到任... 查看详情

Laravel 5.1 - 模型工厂错误种子

...我正在尝试使用一些文章、BlogCategories、用户来填充我的数据库。当我执行“phpartisandb:seed”时出现此错误:[ErrorException]参数2传递给Illuminate\\Database\\Eloquent\\Fact 查看详情

Laravel 5.1 - 连接到 MySQL 数据库 (MAMP)

】Laravel5.1-连接到MySQL数据库(MAMP)【英文标题】:Laravel5.1-ConnectingtoMySQLDatabase(MAMP)【发布时间】:2015-10-1101:40:59【问题描述】:网上有一些话题在讨论这个问题,但是我找不到任何关于这个问题的简洁解释或任何可靠的答案。我... 查看详情

我的 Laravel 项目无法连接到 XAMPP 数据库

】我的Laravel项目无法连接到XAMPP数据库【英文标题】:MyLaravelprojectdon\'tconecttoXAMPPDataBase【发布时间】:2018-09-0209:10:46【问题描述】:我已经在网络上遵循了很好的教程,我确实做了,我已经逐步提出了它的建议,但我无法将我... 查看详情

无法连接到 laravel 5.6 中的数据库 xampp

】无法连接到laravel5.6中的数据库xampp【英文标题】:Can\'tconnecttodatabasexamppinlaravel5.6【发布时间】:2018-08-2215:20:05【问题描述】:我之前用过laravel5.4,我可以很容易地连接到数据库,现在我想在一个新项目中工作。尝试连接数据... 查看详情

本地 Laravel 环境未连接到 AWS RDS 数据库

】本地Laravel环境未连接到AWSRDS数据库【英文标题】:LocalLaravelenvironmentnotconnectingtoAWSRDSdatabase【发布时间】:2019-12-0209:56:02【问题描述】:我已经为开发目的设置了一个本地Laravel环境。难以连接到远程AWSRDSDatabase数据库。.env设置... 查看详情

Laravel 无法连接到数据库 - 迁移 - 错误 2002

】Laravel无法连接到数据库-迁移-错误2002【英文标题】:LaravelCan\'tConnecttodatabase-Migrations-Error2002【发布时间】:2015-02-2522:31:06【问题描述】:我已经搜索了几个小时,但仍然找不到。我得到2个错误,如果我使用数据库主机作为\'lo... 查看详情

Laravel/Homestead - 无法连接到数据库

】Laravel/Homestead-无法连接到数据库【英文标题】:Laravel/Homestead-can\'tconnecttotheDB【发布时间】:2017-11-2115:53:21【问题描述】:我已经在我的机器上安装了宅基地并从远程存储库克隆了一个项目,现在我正在尝试为我的项目创建一... 查看详情

是否可以在 Laravel 项目中使用自己工厂中的模型?

】是否可以在Laravel项目中使用自己工厂中的模型?【英文标题】:Isitpossibletouseamodelinit\'sownfactoryinaLaravelproject?【发布时间】:2018-09-1404:03:49【问题描述】:我的团队正在为服务器代码使用laravel构建一个项目。早期我们打算使用... 查看详情

将 Laravel 应用程序连接到 Android

...个小型laravel应用程序,它只有一个表单并将数据保存到数据库(phpmyadmin)。现在我尝试在我的android应用程序中显示该数据,我尝试通过ip获取它。主要活动如下所示:publicclassMainActivityextendsActivi 查看详情

Laravel Docker 容器无法连接到远程 AWS RDS 数据库

】LaravelDocker容器无法连接到远程AWSRDS数据库【英文标题】:LaravelDockerContainerCannotconnecttoremoteAWSRDSDatabase【发布时间】:2021-05-0315:06:15【问题描述】:我正在使用一个容器化的Laravel应用程序,它应该连接到远程rds数据库,这里是... 查看详情

Laravel 无法连接到其他数据库服务器

】Laravel无法连接到其他数据库服务器【英文标题】:Laravelfailstoconnecttootherdatabaseservers【发布时间】:2015-02-1711:58:49【问题描述】:我使用Laravel已经有一段时间了,但主要是在单个数据库服务器上。现在,我的客户已经从同一个... 查看详情

AWS ElasticBeanstalk 上的 Laravel 应用程序未连接到 RDS 数据库

】AWSElasticBeanstalk上的Laravel应用程序未连接到RDS数据库【英文标题】:LaravelapplicationontheAWSElasticBeanstalkisnotconnectingtotheRDSdatabase【发布时间】:2020-11-0302:56:26【问题描述】:我已将我的Laravel应用程序部署到AWSElasticBeanstalk。我正在... 查看详情

Laravel 4.2 打开第二个数据库连接到主数据库

】Laravel4.2打开第二个数据库连接到主数据库【英文标题】:Laravel4.2openaseconddatabaseconnectiontothemaindatabase【发布时间】:2015-05-0505:19:06【问题描述】:我的laravel应用程序有一个数据库,但出于以下原因,我需要在Laravel中打开两个... 查看详情

将存储安全地连接到 Azure Data Lake Analytics 或数据工厂

】将存储安全地连接到AzureDataLakeAnalytics或数据工厂【英文标题】:ConnectingstoragesecurelytoAzureDataLakeAnalyticsorDataFactory【发布时间】:2018-12-1908:57:25【问题描述】:我正在设置一个新的AzureDataLakeAnalytics(ADLA)PAAS服务来针对blob存储中的... 查看详情