2013-02-01 78 views
1

定義規則時,字段名稱是否必須與數據庫中的列名稱匹配?Kohana 3.2規則失敗

我遇到問題,如果字段名稱和列名稱不匹配,則會顯示規則並且沒有任何內容保存到數據庫。

什麼工作:

數據庫

user_id | username 

<?php echo Form::input('username', $username, array('id' => 'username')); ?><?php echo Arr::get($errors, 'username');?> 

型號

class Model_User extends ORM { 

    protected $_primary_key = 'user_id'; 

    public function rules() 
    { 
     return array(
      'username' => array(
       array('not_empty'), 
      ), 
     ); 
    } 
} 

消息

return array(
    'username' => array(
     'not_empty' => 'You must provide a username.', 
    ), 
); 

什麼不起作用:

數據庫

user_id | username 

<?php echo Form::input('membername', $username, array('id' => 'username')); ?><?php echo Arr::get($errors, 'membername');?> 

型號

class Model_User extends ORM { 

    protected $_primary_key = 'user_id'; 

    public function rules() 
    { 
     return array(
      'membername' => array(
       array('not_empty'), 
      ), 
     ); 
    } 
} 

消息

return array(
    'membername' => array(
     'not_empty' => 'You must provide a username.', 
    ), 
); 

看來如果我將字段名稱更改爲用戶名以外的其他名稱,規則功能無法正常工作。

如果我不應用任何規則,將用戶名更改爲其他內容不會導致將數據保存到數據庫時出現任何問題。

回答

0

將數據庫中的列名映射到不同的內部名稱是不可能的。同樣的列名也用於設置規則,標籤等。我不明白你爲什麼想要改變列名,這對開發者的期望是不利的。我的建議是在這種情況下重命名你的表列。

Kohana ORM提供的控制表列的唯一可能性是將要使用的列名列表白名單。在你的ORM模塊中使用這個變量:

protected $_table_columns = array('column1','column2'); 
+0

我希望事實並非如此。我的代碼沒有規則。我的字段名稱與列名稱不同,因爲所有信息來自同一個表,因此不能將其稱爲相同的字段名稱。這是一個選項表,所以一行是網站名稱,下一行是網站描述。字段名稱將是sitename和sitedescription,而不是信息來自的列的名稱。 – markerpower

+0

似乎外部驗證是我需要做的。 – markerpower