2011-10-21 2 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 컨트롤러 :

Database_Exception : 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이 오류가 발생합니다 [1146] : 'packs_db.packses'테이블이 존재하지 않습니다. [FULL FULL COLUMNS FROM 'packses]

내 database.php conf 파일을 확인했습니다. 왜 da hell은 kohana가 테이블 이름 끝에 "es"를 추가합니까? 나는 완전히 당황 스럽다. ...

답변

1

kohana가 "똑똑하다"고 생각하고 클래스 이름을 기반으로 테이블 이름이 무엇인지 추측합니다. 모델 이름을 Model_Pack으로 변경하면 트릭을해야합니다. 다른 해결책은 모델에 table name을주는 것입니다.

+0

감사합니다. 나는 Kohana에서 새롭고 ORM doc에서 이것을 놓쳤다. – Piero

1

테이블 이름이 복수 인 경우에도 모델의 이름은 단명 명 Model_Pack이어야한다. 이 두 규칙은 Kohana ORM conventions의 일부입니다.

p/s : 링크는 Kohana 2.x의 규칙을 나타내지 만 수정 된 사항은 3.x에도 적용됩니다.

1

또한이 문제가 발생했습니다. 해결책 중 하나는 set _table_names_plural 변수를 false로 제한하는 것입니다. 다음과 같은 내용 :

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

네가 맞다. 또 다른 간단한 해결책은 table_name 속성을 오버라이드하는 것이다. 보호 된 $ _tablename = "whatever_you_want"; – Piero