ModelFactory:错误:在 null 上调用成员函数 connection()

Posted

技术标签:

【中文标题】ModelFactory:错误:在 null 上调用成员函数 connection()【英文标题】:ModelFactory: Error: Call to a member function connection() on null 【发布时间】:2019-02-24 17:41:37 【问题描述】:

在尝试使用 ModelFactory 填充数据库时,我遇到了这个错误,自过去六个小时以来我一直在查找,似乎无法修复它。

我的测试运行这个:

$books = factory('App\Book', 2)->create();

错误信息是这样的:

There was 1 error:

1) Tests\App\Http\Controllers\BooksControllerTest::testIndexReturnsCollection
Error: Call to a member function connection() on null

D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:1234
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:1200
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:1030
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:945
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\Model.php:983
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\FactoryBuilder.php:203
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\support\Collection.php:407
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\FactoryBuilder.php:207
D:\Code\Server\htdocs\rlfp.localhost.com\vendor\illuminate\database\Eloquent\FactoryBuilder.php:185
D:\Code\Server\htdocs\rlfp.localhost.com\tests\app\Http\Controllers\BooksControllerTest.php:35

在我的 bootstrap/app.php 上,我在第 26 行和第 28 行,如下所示:

$app->withFacades();

$app->withEloquent();

虽然我的 phpunit.xml 是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/app.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="DB_DATABASE" value="rlp_rlfpsfactory"/>
    </php>
</phpunit>

我需要在 phpunit xml 文件的 php 部分添加其他内容吗?

【问题讨论】:

我和这个已经斗争了几天。似乎是 Lumen 5.7 中的一个错误,因为一旦我降级 tp 5.6 它就可以工作了。 @ChrisSprague 成功了!我只是删除了我的供应商文件夹,更改了 composer.json 中的流明版本,composer install,然后它就起作用了!非常感谢! 【参考方案1】:

在没有运气的一整天之后,感谢@ChrisSprague,我将 Lumen 降级到 5.6,并且成功了。

步骤:

    在 composer.json 文件更改

    "laravel/lumen-framework": "5.7.*"
    

    "laravel/lumen-framework": "5.6.*"
    

    删除您的vendor 文件夹

    composer install 再次运行测试!

如果仍然无法正常工作,请确保您的 phpunit.xml 文件中有正确的测试数据库详细信息

我的看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/app.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="DB_DATABASE" value="rlp_rlfpsfactory"/> <!-- this is testing database -->
        <env name="DB_USERNAME" value="root"/>
        <env name="DB_PASSWORD" value=""/>
    </php>
</phpunit>

【讨论】:

以上是关于ModelFactory:错误:在 null 上调用成员函数 connection()的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC源码解析- HandlerAdapter - ModelFactory

Laravel5.1 模型--ModelFactory

Model & ModelMap & ModelAndView 比较ModelFactory简介

Model Factory 和 Laravel 中的 DB 播种机有啥区别?

在 UITableViewCell 上调暗 tintColor

使用 OntProperty 和 DatatypeProperty - Jena Ontology