Kohana 3.2 ORM和PDO

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_columnsprotected属性中指定表列:

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方法并提供自己的列表列表.