【问题标题】:Error when Call to a member function connection() on a non-object while using Illuminate Database使用 Illuminate 数据库时在非对象上调用成员函数 connection() 时出错
【发布时间】:2014-02-18 10:21:48
【问题描述】:

我已经用 Composer 安装了 Sentry,因此它也安装了 Illuminate Database。安装成功,我已经完成了哨兵文档中的所有内容。我正在尝试使用简单的代码将用户添加到数据库中。但是它给了我这个错误信息:

Fatal error: Call to a member function connection() on a non-object in C:\Program Files\EasyPHP-DevServer-14.1VC9\data\localweb\ilhan\vendor\illuminate\database\Illuminate\Database\Eloquent\Model.php on line 2472

我的代码如下:

<?php
include_once "vendor/autoload.php";


use Illuminate\Database\Capsule\Manager as Capsule;
$capsule = new Capsule;

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'ilhantestdb',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
]);



use Cartalyst\Sentry\Sentry as Sentry;


try
{
    $user = new Sentry;
    // Create the user
    $user->createUser(array(
        'email'     => 'john.doe@example.com',
        'password'  => 'test',
        'activated' => true,
    ));

    // Find the group using the group id
    $adminGroup = Sentry::findGroupById(1);

    // Assign the group to the user
    $user->addGroup($adminGroup);
}
catch (Cartalyst\Sentry\Users\LoginRequiredException $e)
{
    echo 'Login field is required.';
}
catch (Cartalyst\Sentry\Users\PasswordRequiredException $e)
{
    echo 'Password field is required.';
}
catch (Cartalyst\Sentry\Users\UserExistsException $e)
{
    echo 'User with this login already exists.';
}
catch (Cartalyst\Sentry\Groups\GroupNotFoundException $e)
{
    echo 'Group was not found.';
}

即使我不知道如何调试它。另外,我认为由于 Illuminate 带有 Sentry,所以应该对 Sentry 进行编码以如何处理 Illuminate,因此我不需要太多配置。文档很差,我无法找到如何处理此错误。

【问题讨论】:

    标签: php mysql cartalyst-sentry illuminate-container


    【解决方案1】:

    您还必须启动 ORM。文档对此并不十分清楚。

    use Illuminate\Database\Capsule\Manager as Capsule;
    $capsule = new Capsule;
    
    $capsule->addConnection([
         ...
    ]);
    
    $capsule->bootEloquent();
    

    【讨论】:

    • 我在这上面花了几个小时!这解决了我的问题,谢谢!
    【解决方案2】:

    尝试将 Capsule 设置为全局。我无法与 Sentry 交谈,但我自己正在尝试在一个项目中使用 Capsule,并且遇到了同样的问题。

    看看这里:https://github.com/illuminate/database/blob/master/Capsule/Manager.php#L113 您会发现其中的许多便利功能都依赖于设置static::$instance 变量,该变量设置在https://github.com/illuminate/database/blob/master/Capsule/Manager.php#L192 上。

    就我而言,我尝试使用 $capsule 而不将其设置为全局。我最终需要做的是像$capsule-&gt;getConnection()-&gt;table('foo')-&gt;get() 那样编写我的查询。在您的情况下,我认为 Sentry 正在尝试通过静态类方法访问 Eloquent 和 Capsule。

    tl;dr 运行$capsule-&gt;setAsGlobal();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 2015-09-15
      • 2014-12-28
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多