2016-07-07 1 views
0

SlimマイクロフレームワークでLaravelのEloquent ORMを使用しようとしていますが、エラーが表示されています。LaravelのEloquent ORMを使用してSlimのnullエラーでメンバー関数connection()を呼び出す

dependency.php

$container['db'] = function($container) { 
    $capsule = new \Illuminate\Database\Capsule\Manager; 
    $capsule->addConnection($container->get('settings')['database']); 

    $capsule->setAsGlobal(); 
    $capsule->bootEloquent(); 

    return $capsule; 
}; 

User.php(Modelクラス)

:()ヌル

にここコードであります

use Illuminate\Database\Eloquent\Model as Model; 

class User extends Model { 

    protected $table = "users"; 

    protected $fillable = ['name', 'email', 'password']; 
} 

スリムクラスは、このようにインスタンス化された(コントローラクラス)

class Home extends Controller { 

public function index($request, $response, $args) { 
     $user = User::find(1); 
     var_dump($user); 
     die(); 
     $title = "Slim Auth"; 
     $response = $this->view->render($response, 'home.php', ["title" => $title]); 
     return $response; 
    } 
} 

dependency.phpは私のbootstrap.phpのファイルに必要とされたHomeController.php:

$config = [ 
    'settings' => [ 
     'displayErrorDetails' => true, 

     'view' => [ 
      'view_path' => APP_PATH . 'views/' 
     ], 

     'database' => [ 
      'driver' => 'mysql', 
      'host'  => 'localhost', 
      'database' => 'tutorial_slim_auth', 
      'username' => 'root', 
      'password' => 'passw0rd', 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
     ], 
    ] 
]; 

$app = new Slim\App($config); 

にHomeControllerながら、 .phpとUser.phpは、作者jsonファイル経由で自動読み込みされました。

$app->run(); 

これは私に致命的なエラーを与えた:含むファイル(また私のbootstrap.phpのを含む)のindex.phpを実行した後、ヌルのメンバ関数接続()を呼び出します。 しかし、これやって:私のブートストラップファイルに

echo '<pre>'; 
print_r($container['db']); 
echo '</pre>'; 

はHomeController.phpファイルに呼び出されるのvar_dump関数の結果と一緒に予想される結果を生成しました。私は何をしますか?それとも私は何もしていないのですか?

+0

オフフック質問ですが、マイクロフレームワークであるルーメンを使用しないでください。また、Eloquent ORMをサポートしていますか? –

+0

例外の完全なスタックを追加できますか? –

答えて

6

ここでカプセル化されたあなたのグローバル$カプセル:

$container['db'] = function($container) { 
    $capsule = new \Illuminate\Database\Capsule\Manager; 
    $capsule->addConnection($container->get('settings')['database']); 

    $capsule->setAsGlobal(); 
    $capsule->bootEloquent(); 

    return $capsule; 
}; 

はこれを試してみてください:複数の接続で

$capsule = new \Illuminate\Database\Capsule\Manager; 
$capsule->addConnection($container['settings']['db']); 
$capsule->setAsGlobal(); 
$capsule->bootEloquent(); 

$container['db'] = function ($container) { 
    return $capsule; 
}; 
+0

これはなぜ機能するのでしょうか?私はまったく同じ問題を抱えていた。 – BugHunterUK

+0

1つ以上の接続を別のデータベースにどのように追加しますか?クエリビルダーを使用してクエリを作成するときに、これらの2つの接続のどちらを使用するかは、どのように判断しますか? – Pathros

+0

パーフェクト。なぜこれが働くのか少し説明していただけますか? –

0

、これを試してみてください。そして、

$dbconfig = $ci->settings['db']; 

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

foreach ($dbconfig['connections'] as $cname => $connection) 
{ 
    $cname = $cname == $dbconfig['default'] ? 'default' : $cname; 

    $capsule->addConnection($connection, $cname); 
} 

$capsule->setFetchMode($dbconfig['fetch']); 
$capsule->setAsGlobal(); 
$capsule->bootEloquent(); 

$ci['db'] = function ($ci) use($capsule) { 
    return $capsule; 
}; 

DB::connection('other_connection')->table('...')->get(); 
関連する問題