【问题标题】:Call to a member function connection() on a non-object error on Laravel 5在 Laravel 5 上的非对象错误上调用成员函数 connection()
【发布时间】:2015-09-15 03:25:15
【问题描述】:

我想将用户配置数据存储在数据库中,我正在关注这个论坛帖子http://forumsarchive.laravel.io/viewtopic.php?id=10406 但是当我实现它时,laravel 会抛出一个错误。 我运行了 composer dump-autoload 但似乎没有任何问题。这里有什么问题?

// 文件名:app/config/settings.php

use \App\Models\Setting

$list = array();

$format = function(&$list, $keys, $val) use(&$format) {
    $keys ? $format($list[array_shift($keys)], $keys, $val) : $list = $val;
};

foreach(Setting::all() as $setting) {
    $format($list, explode('.', $setting->token), $setting->content);
}

return $list;

用法:

echo Config::get('settings.token'); // 返回“内容”的值

完全错误

Fatal error: Call to a member function connection() on a non-object in C:\wamp\www\iapp\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php on line 3137
Call Stack
#   Time    Memory  Function    Location
1   0.0017  247544  {main}( )   ..\index.php:0
2   0.0910  2848480 Illuminate\Foundation\Http\Kernel->handle( )    ..\index.php:58
3   0.0910  2848736 Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter( )  ..\Kernel.php:86
4   0.0917  2886304 Illuminate\Foundation\Http\Kernel->bootstrap( ) ..\Kernel.php:110
5   0.0917  2886472 Illuminate\Foundation\Application->bootstrapWith( ) ..\Kernel.php:215
6   0.0974  2994336 Illuminate\Foundation\Bootstrap\LoadConfiguration->bootstrap( ) ..\Application.php:194
7   0.0986  3025160 Illuminate\Foundation\Bootstrap\LoadConfiguration->loadConfigurationFiles( )    ..\LoadConfiguration.php:38
8   0.1407  3814624 require( 'C:\wamp\www\iapp\config\settings.php' )   ..\LoadConfiguration.php:56
9   0.1407  3814696 ConfigSetting::getSettings( )   ..\settings.php:28
10  0.1494  4488840 Illuminate\Database\Eloquent\Model::all( )  ..\settings.php:16
11  0.1496  4494520 Illuminate\Database\Eloquent\Model->newQuery( ) ..\Model.php:646
12  0.1496  4494616 Illuminate\Database\Eloquent\Model->newQueryWithoutScopes( )    ..\Model.php:1769
13  0.1496  4494688 Illuminate\Database\Eloquent\Model->newBaseQueryBuilder( )  ..\Model.php:1795
14  0.1496  4494736 Illuminate\Database\Eloquent\Model->getConnection( )    ..\Model.php:1852
15  0.1496  4494784 Illuminate\Database\Eloquent\Model::resolveConnection( )

编辑:

命名空间 App\Models;

使用 Illuminate\Database\Eloquent\Model;

类设置扩展模型{

}

【问题讨论】:

  • App\Models\Setting 模型是什么样的?这个模型可以和你的数据库通信吗?您可以在问题中包含代码吗?
  • 您的数据库连接似乎有问题。此模型可以与您的数据库通信吗?
  • 它适用于所有其他地方,如普通路由和控制器,但不适用于配置文件。有一个关于它的问题,但只回答了一半。 stackoverflow.com/questions/29203532/…

标签: laravel eloquent laravel-5


【解决方案1】:

Laravel 6.x 及更高版本 中运行 TestCase 时,我经常遇到这个错误。我意识到单元测试是从 PHPUnit TestClass 而不是 Laravel TestCase 扩展的。所以把PHPUnit\Framework\TestCase;改成Tests\TestCase

<?php


use Tests\TestCase;

class ArtifactTest extends TestCase{

}

【讨论】:

  • 啊!谢谢!我用头撞墙了一个多小时,试图调试这个错误,就是因为这个。您可以将其移至它自己的问答中,但添加更多关键词以帮助人们找到它。
  • 这应该被标记为正确答案!
【解决方案2】:

转到 bootstrap/app.php

取消注释

$app->withEloquent();

【讨论】:

  • 谢谢,我在 lumen 上找到了它,但在 laravel 上找不到
  • 我想知道为什么启用 eloquent 是一种选择,但框架(模型)的主要组件完全依赖于 Eloquent!他们将此功能设为可选,以在基准测试中击败其他微框架!
  • 嗨@yussan,请确保您使用 Laravel 5 而不是 Laravel 4
  • 当然@alexanderarda 现在我正在使用 Lumen 和 Laravel 5 基础
【解决方案3】:

使用设置文件中的模型并不是使用它们的最佳方式。

您的问题是,您的模型查询是在 Laravel 启动它的服务之前启动的。这就是为什么当您尝试进行查询时,模型无法解析它的连接,因为数据库服务尚未启动。

如果你想做这些事情,创建你自己的 ServiceProvider 并在那里更新你的配置,或者在你现有的 AppServiceProviderboot 方法中直接做。

【讨论】:

  • "你的问题是,你的模型查询是在 Laravel 启动它的服务之前开始的。这就是为什么,当你尝试进行查询时,模型无法解析它的连接,因为数据库服务还没有发起。” - 这就是完美的答案!刚刚意识到。
猜你喜欢
  • 2014-12-28
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多