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
Model & ModelMap & ModelAndView 比较ModelFactory简介
Model Factory 和 Laravel 中的 DB 播种机有啥区别?