One*_*ema 14 php mysql pdo kohana kohana-orm
我正在尝试使用Kohana,我试图使用ORM + PDO + MySQL数据库,我似乎没有在谷歌或SO中找到答案.
我启用了数据库和ORM模块,并且我已将模块/ database/config/database.php中的PDO设置为默认值
我有一个简单的控制器和一个简单的模型:
MODEL应用程序/ classes/model/blogpost.php:
<?php
class Model_Blogpost extends ORM {
protected $_table_name = 'blog_post';
}
Run Code Online (Sandbox Code Playgroud)
CONTROLLER:在application/classes/controller/welcome.php中
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Welcome extends Controller {
public function action_index() {
$Blog_Post = ORM::factory('blogpost'); // ==> ERROR HERE
$Blog_Post->name = 'test1';
$Blog_Post->description = 'this is a quick test';
$Blog_Post->content = 'The content goes here....';
$Blog_Post->save();
$id = $Blog_Post->id;
$Blog_Post = ORM::factory('blogpost', $id);
$view->Blog_Post = $Blog_Post;
$this->response->body($view);
}
} // End Welcome
Run Code Online (Sandbox Code Playgroud)
我尝试运行测试时出现以下错误:
Kohana_Exception [0]:Kohana_Database_PDO不支持数据库方法list_columns
我在google和Stack Overflow中进行了搜索,我的印象是ORM可能无法与PDO一起使用,这是正确的吗?还是我错过了什么?
谢谢.
Luw*_*uwe 17
list_columns
用于ORM以在未指定表时获取表中的所有列.要解决此问题,您可以在_table_columns
protected属性中指定表列:
class Model_Blogpost extends ORM {
protected $_table_name = 'blog_post';
protected $_table_columns = array(
'column1' => NULL,
'column2' => NULL,
// ...
'columnx' => NULL,
);
}
Run Code Online (Sandbox Code Playgroud)
这将确保list_columns
不会被调用.缺点是你必须跟踪你所做表的每一个变化.好处是SHOW FULL COLUMNS
没有调用额外的查询,这意味着性能提升很小.
另一种方法是覆盖list_columns
方法并提供自己的列表列表.