Kohana データベースに問題があります。たまにエラー出ます
ErrorException [ Recoverable Error ]
Argument 1 passed to Kohana_Database_Query_Builder_Select::compile() must be an instance of Database, string given, called in /srv/sites/mysite/www/modules/database/classes/kohana/database/query.php on line 230 and defined
これは、Database:$instances に文字列 " dances " が含まれているが、配列データベース構成が含まれている必要があるために発生します。
これは私の設定です:
<?php defined('SYSPATH') OR die('No direct access allowed.');
return array
(
'default' => array
(
'type' => 'MySQL',
'connection' => array(
'hostname' => 'localhost',
'database' => 'chat',
'username' => 'root',
'password' => 'root',
'persistent' => FALSE,
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
'profiling' => TRUE
)
);
多分誰かがこのような問題を抱えていたのですか、それとも私を助けることができましたか?
DB へのクエリはエラーを引き起こします。このような:
Jelly::factory('user', $user->id())
またはこれ:
DB::select('value')->from('storage')->where('name', '=', 'salt')->limit(1)->execute();
またはこれ:
ORM::factory('node')->where('type', '=', 'page-homepage')->find();
なぜこのエラーが発生するのかわかりません。すべてのメソッドが呼び出されていることを確認しましたが、間違いは見つかりませんでした。
instance
クラス Database のwrite メソッドでこの問題を解決しました
public static function instance($name = NULL, array $config = NULL)
{
if ($name === NULL)
{
// Use the default instance name
$name = Database::$default;
}
if ( ! is_array(Database::$instances))
{
Database::$instances = array();
}
if ( ! isset(Database::$instances[$name]))
{
if ($config === NULL)
{
// Load the configuration for this database
$config = Kohana::$config->load('database')->get($name);
}
if ( ! isset($config['type']))
{
throw new Kohana_Exception('Database type not defined in :name configuration',
array(':name' => $name));
}
// Set the driver class name
$driver = 'Database_'.ucfirst($config['type']);
// Create the database connection instance
new $driver($name, $config);
}
return Database::$instances[$name];
}
ご覧のとおり条件を追加します
if ( ! is_array(Database::$instances))
{
Database::$instances = array();
}
私はこれが好きではありませんが、選択の余地はありません。