我刚刚找到了最新的 Kohana 3.3,这里有一个链接可以帮助了解为什么 ORM 不支持 PDO:http: //dev.kohanaframework.org/issues/3412
即,
没有不可知的方式来实现列表表和列。
所以,嗯,我花了一点时间尝试支持它,因为描述每张桌子听起来像是很多工作,尽管这个答案很受欢迎!
因此,在您的 MODPATH 或 APPPATH 中(取决于您加载数据库内容的位置)在 %above%/classes/Database/PDO/MySQL.php 处创建一个新文件
<?php defined('SYSPATH') or die('No direct script access.');
class Database_PDO_MySQL extends Database_PDO {
public function list_columns($table, $like = NULL, $add_prefix = TRUE)
{
// Quote the table name
$table = ($add_prefix === TRUE) ? $this->quote_table($table) : $table;
if (is_string($like))
{
// Search for column names
$result = $this->query(Database::SELECT, 'SHOW FULL COLUMNS FROM '.$table.' LIKE '.$this->quote($like), FALSE);
}
else
{
// Find all column names
$result = $this->query(Database::SELECT, 'SHOW FULL COLUMNS FROM '.$table, FALSE);
}
$count = 0;
$columns = array();
foreach ($result as $row)
{
list($type, $length) = $this->_parse_type($row['Type']);
$column = $this->datatype($type);
$column['column_name'] = $row['Field'];
$column['column_default'] = $row['Default'];
$column['data_type'] = $type;
$column['is_nullable'] = ($row['Null'] == 'YES');
$column['ordinal_position'] = ++$count;
switch ($type) //was $column['type']
{
case 'float':
if (isset($length))
{
list($column['numeric_precision'], $column['numeric_scale']) = explode(',', $length);
}
break;
case 'int':
if (isset($length))
{
// MySQL attribute
$column['display'] = $length;
}
break;
case 'string':
switch ($column['data_type'])
{
case 'binary':
case 'varbinary':
$column['character_maximum_length'] = $length;
break;
case 'char':
case 'varchar':
$column['character_maximum_length'] = $length;
case 'text':
case 'tinytext':
case 'mediumtext':
case 'longtext':
$column['collation_name'] = $row['Collation'];
break;
case 'enum':
case 'set':
$column['collation_name'] = $row['Collation'];
$column['options'] = explode('\',\'', substr($length, 1, -1));
break;
}
break;
}
// MySQL attributes
$column['comment'] = $row['Comment'];
$column['extra'] = $row['Extra'];
$column['key'] = $row['Key'];
$column['privileges'] = $row['Privileges'];
$columns[$row['Field']] = $column;
}
return $columns;
}
}
这到底是什么,是我复制 %MODPATH%/database/classes/Kohana/databases/MySQL.php list_column 并做一个调整($type 而不是 $column['type']),它似乎有点工作到目前为止我已经测试过了。
其次,您需要使用新的驱动程序。这是通过将您的 %path%/database/config/database.php 'type' 字段从 PDO 更改为 PDO_MySQL 来完成的。
如果不清楚,或者您发现问题,请告诉我。