2012-07-25 70 views
1

我正在使用kohana 3.2。並且我在使這個新型號工作時遇到了一些麻煩。 有一個型號:Model_User_Unavailability,它工作正常,並且沒有型號Model_User_Unavailability_StatusKohana 3.2。表名未找到

問題是沒有找到模型,它使用它。我可以用做一個狀態:ORM::factory('user_unavailability_status');,它工作得很好,但是當我想要的狀態添加到不可用類,它不會工作,我收到以下異常:

Incorrect table name '' [ INSERT INTO `` (`user_unavailability_id`, `status_id`) VALUES ('670', NULL) ] 

的類看像這樣:

class Model_User_Unavailability extends ORM 
{ 
    protected $_belongs_to = array(
     'user' => array(), 
    ); 
    protected $_table_name = 'user_unavailability'; 

    protected $_has_many = array(
     'status' => array(
      'model' => 'User_Unavailability_Status', 
      'foreign_key' => 'user_unavailability_id' 
     ) 
    ); 
...etc 

class Model_User_Unavailability_Status extends ORM 
{ 
    protected $_table_name = 'user_unavailability_status'; 
    protected $_belongs_to = array(
     'user_unavailability' => array(
      'foreign_key' => 'user_unavailability_id', 
      'model' => 'user_unavailability' 
     ) 
    ); 
    etc... 

現在異常出現,當我嘗試以下方法:

$db = $user->unavailable->where('id', '=', $id)->find(); // Returns User_Unavailability object 
//... do some other stuf... 
$db->save(); 

if($db->loaded()) 
{ 
    $status = ORM::factory('user_unavailability_status'); 
    $status->status = 'requested'; 
    $status->responder_id = 1; 
    $db->add('status',$status); 
} 

正如您在前面的例外中所看到的,它不會使用指定的表名稱。然而,當我從狀態類刪除$ _table_name變量,我得到以下錯誤:

Table 'urenregistratie.user_unavailability_statuses' doesn't exist [ SHOW FULL COLUMNS FROM `user_unavailability_statuses` ] 

正如你可以看到它發現的模式,但將無法找到數據庫表。所以我的問題是,這裏發生了什麼?我想我失去了一些東西,但我不知道是什麼...

當我在狀態模型中使用$this->_table_names_plural = false時會發生同樣的情況。

所以......任何建議/想法?

編輯:

看來工作時,我改變$db->add('status',$status);行:

$status->user_unavailability_id = $db->id; 
$status->save(); 

不算漂亮,但並仍然不知道發生了什麼阻止我使用add功能。

+0

其更好地使用'$狀態 - > user_availability = $ db'。另外,在保存'belongs_to'關係之前,你不需要調用'$ status-> save()'。 – biakaveron 2012-07-26 05:30:59

+0

我有同樣的麻煩。 @biakaveron你能幫助澄清這一點,因爲它正是我所困惑的。如果'Model_A'屬於'Model_B',我做'$ a-> b = $ b;',我不需要調用'$ a-> save()'或者我不需要調用' $ B->保存()'?或者等等,我根本就不會調用save,因爲賦值('__set()')可以完成這項工作? – Lim 2013-04-08 02:45:28

+0

不,'__set()'只會修改模型而不保存(https://github.com/kohana/orm/blob/3.3/master/classes/Kohana/ORM.php#L743)。在$模型中進行所有更改並保存。 – biakaveron 2013-04-08 05:15:51

回答

2

add()用於has_many "through"的關係。

你的情況,你已經寫正確的方法:

$status->user_unavailability_id = $db->id; 
$status->save();