2011-10-21 42 views
0

我有所謂的 「包」(pack_id,pack_name,pack_description,pack_image)一個數據庫表Kohana的ORM錯誤

我packs.php型號:

<?php defined('SYSPATH') or die('No direct script access.'); 

    class Model_Packs extends ORM { 

    } 

我packs.php控制器:

<?php defined('SYSPATH') or die('No direct script access.'); 

class Controller_Packs extends Controller { 

    public function action_index($pack_name = null) 
    { 
     $view = new View('packs/index');       
     $this->response->body($view); 
    } 

    public function action_pack() 
    { 
     $pack_name = $this->request->param('id'); //get the packname from uri 

     $pack = ORM::factory('packs')->where('pack_name', $pack_name)->find(); 
     print_r($pack);die; 

     $view = new View('packs/index'); 

     $this->response->body($view); 
    } 
} // End of file 

調用www.mysite.com/packs/pack/aPackName,Kohana中引發此錯誤:

Database_Exception [1146]:表'packs_db.packses'不存在[SHOW FULL COLUMNS FROM'packses']

我檢查了我的database.php conf文件,一切正常。 爲什麼地獄是kohana在表名的末尾添加「es」?我完全不解...

回答

1

似乎kohana正在努力做到「聰明」,並猜測基於類名的表名是什麼。 如果您將您的模型重命名爲Model_Pack它應該這樣做。其他解決方案是給你的模型table name

+0

謝謝你們兩位。我是Kohana的新成員,在ORM文檔中錯過了這個... – Piero

1

即使您的表名是複數,您的模型應該以單數名詞Model_Pack命名。這兩條規則是Kohana ORM conventions的一部分。

p/s:鏈接指向Kohana 2.x的約定,但它們仍然適用於3.x,並進行一些修改。

1

也有這個問題,我發現的解決方案之一是限制設置_table_names_plural變量爲false。類似這樣的:

class Model_Admin_Users extends ORM 
    { 
    public function __construct() 
    { 
    $this->_table_names_plural = false; 
    parent::__construct(); 
    } 
    } 
+0

是的,你是對的,另一個更簡單的解決方案是覆蓋table_name屬性。 protected $ _tablename =「whatever_you_want」; – Piero