2011-10-21 7 views
0

は、私が "パック"(pack_id、pack_name、pack_description、pack_image)と呼ばれるdbテーブルを持っているKohanaのORMエラー

マイpacks.phpモデル:

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

    class Model_Packs extends ORM { 

    } 

マイpacks.phpコントローラ:

www.mysite.com/packs/pack/aPackNameを呼び出す
<?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 

、Kohanaのは、このエラーがスローされます。

Database_Exception [1146]: 'packs_db.packses'テーブルが存在しません。[packsesから 'FULL FULL COLUMNS FROM' packses ']

私のdatabase.php confファイルを確認しました。 なぜda hellは表名の最後に "es"を追加するkohanaですか?私は完全に困惑しています...

答えて

1

Kohanaのが「スマート」ことと、クラス名に基づいて、テーブル名何を推測しようとしているようです。 モデルの名前をModel_Packに変更する場合は、そのトリックを行う必要があります。他の解決策はあなたのモデルにtable nameを与えることです。

+0

感謝します両方。私はKohanaの中に新たなんだとORMドキュメントでこれを逃した... – Piero

1

あなたのモデルは、あなたのテーブル名が複数であっても単数名詞Model_Packで命名されなければなりません。これらの2つのルールはKohana ORM conventionsの一部です。

P/S:Kohanaの2.xのための規則へのリンクポイント彼らはまだいくつかの変更と3.xの適用されます。

1

はまた、私が見つけた解決策の一つがfalseに設定さ_table_names_plural変数を制限することで、この問題を抱えていました。このような何か:

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

関連する問題