我对 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
我通过类数据库中的 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();
}
我不喜欢这样,但我别无选择。