【问题标题】:Laravel Eloquent ORM - Error when calling methodLaravel Eloquent ORM - 调用方法时出错
【发布时间】:2017-04-08 22:36:51
【问题描述】:

我正在尝试在我正在构建的自定义 PHP 框架中通过 composer 使用 Laravel 的 Eloquent ORM,在我的控制器中调用 create 方法时出现奇怪的错误。

错误:

致命错误:未捕获的异常“Illuminate\Contracts\Container\BindingResolutionException”带有消息“目标 [Illuminate\Contracts\Debug\ExceptionHandler] 不可实例化。”在 /Users/justin/Sites/test/vendor/illuminate/container/Container.php:763 堆栈跟踪:#0 /Users/justin/Sites/test/vendor/illuminate/container/Container.php(644): Illuminate\ Container\Container->build('Illuminate\Cont...', Array) #1 /Users/justin/Sites/test/vendor/illuminate/database/Connectors/ConnectionFactory.php(130): Illuminate\Container\Container- >make('Illuminate\Cont...') #2 [内部函数]: Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors{closure}() #3 /Users/justin/Sites/test/vendor /illuminate/database/Connection.php(964): call_user_func(Object(Closure)) #4 /Users/justin/Sites/test/vendor/illuminate/database/Connection.php(832): Illuminate\Database\Connection-> getPdo() #5 /Users/justin/Sites/test/vendor/illuminate/database/Connection.php(717): Illuminate\Database\Connection->rec in /Users/justin/Sites/test/vendor/illuminate/container /Container.php 在第 763 行

数据库连接:

use Illuminate\Database\Capsule\Manager as Capsule;
$capsule = new Capsule();
$capsule->addConnection([
    'driver' => 'mysql',
    'host' => 'localhost',
    'username' => 'root',
    'password' => 'root',
    'database' => 'database',
    'port' => '3306',
    'charset' => 'utf-8',
    'collation' => 'utf8_unicode_ci'
]);
$capsule->bootEloquent();

模特:

use Illuminate\Database\Eloquent\Model as Eloquent;

class User extends Eloquent{

    protected $fillable = ['username','email'];

}

最后的方法:

public function create($username = '', $email = ''){
    User::create([
        'username' => $username,
        'email' => $email
    ]);
}

谁能帮帮我?

【问题讨论】:

  • "illuminate/database": "^5.3"

标签: php laravel eloquent


【解决方案1】:

您的 Eloquent 初始化可能不完整。

以下是我在 Silex 应用程序中的实现方式:

<?php
namespace App\Base\Provider\Database;

use Silex\Application;
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
use Illuminate\Database\Capsule\Manager as Capsule;

class DatabaseSummoner
{
    public static function setup(Application $app)
    {
        $app['db'] = $app->share(function () use ($app) {
            # Set up Fluent Query Builder
            $capsule     = new Capsule;
            $db_settings = $app['config']['db'];

            $capsule->addConnection(
                $db_settings['connections'][$db_settings['connection']]
            );

            return $capsule;
        });

        // Set the event dispatcher used by Eloquent models...
        $app['db']->setEventDispatcher(new Dispatcher(new Container));

        // These two have to be outside closure
        // Make the Capsule instance available globally via static methods...
        $app['db']->setAsGlobal();
        // Boot Eloquent ORM
        $app['db']->bootEloquent();
    }
}

然后在我的 composer.json 中,我需要 "illuminate/database": "~5.3""illuminate/events": "~5.3"(这第二个是可选的,但如果你想使用模型事件很有用)。

最后,在我的Application 类的__construct() 中,我调用DatabaseSummoner::setup($this);

这显然与您的设置不同,但您可能会找到自己的方式。

【讨论】:

    【解决方案2】:

    更新:意识到我使用的 Illuminate 版本不正确,需要使用 4.2

    【讨论】:

    • 我浪费了至少 2 天的时间试图找出问题所在......最新版本完全坏了。谢谢。
    猜你喜欢
    • 2018-01-09
    • 2013-01-22
    • 1970-01-01
    • 2013-02-12
    • 2016-07-01
    • 2016-09-24
    • 2013-12-28
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多