简体   繁体   English

Laravel Eloquent ORM-调用方法时出错

[英]Laravel Eloquent ORM - Error when calling method

I am trying to use Laravel's Eloquent ORM via composer in a custom PHP framework I am building and I am getting an odd error when calling a create method in my controller. 我正在尝试通过正在构建的自定义PHP框架中的composer使用Laravel的Eloquent ORM,并且在控制器中调用create方法时遇到奇怪的错误。

The Error: 错误:

Fatal error: Uncaught exception 'Illuminate\\Contracts\\Container\\BindingResolutionException' with message 'Target [Illuminate\\Contracts\\Debug\\ExceptionHandler] is not instantiable.' 致命错误:带有消息“目标[Illuminate \\ Contracts \\ Debug \\ ExceptionHandler]的未捕获异常'Illuminate \\ Contracts \\ Container \\ BindingResolutionException”不可实例化。 in /Users/justin/Sites/test/vendor/illuminate/container/Container.php:763 Stack trace: #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 [internal function]: 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 on line 763 在/Users/justin/Sites/test/vendor/illuminate/container/Container.php:763中的堆栈跟踪:#0 /Users/justin/Sites/test/vendor/illuminate/container/Container.php(644):照亮\\ 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-> / Users / justin / Sites / test / vendor / illuminate / container中的REC /Container.php行763

The Database Connection: 数据库连接:

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();

The Model: 该模型:

use Illuminate\Database\Eloquent\Model as Eloquent;

class User extends Eloquent{

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

}

Finally the Method: 最后是方法:

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

Can someone help me out? 有人可以帮我吗?

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

Your Eloquent init may be incomplete. 您的雄辩性初始化可能不完整。

The following is how I implemented it in a Silex app: 以下是我在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();
    }
}

Then in my composer.json I require "illuminate/database": "~5.3" and "illuminate/events": "~5.3" (this second is optional, but useful if you want to use model events). 然后在我的composer.json文件中,我需要"illuminate/database": "~5.3""illuminate/events": "~5.3" (这是可选的,但如果要使用模型事件,则很有用)。

And, finally, in the __construct() of my Application class I call DatabaseSummoner::setup($this); 最后,在我的Application类的__construct() ,我调用DatabaseSummoner::setup($this); .

This obviously differs from your setup, but you may find your way. 显然,这与您的设置不同,但是您可以找到自己的方式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM