2013-03-13 61 views
-1

我開發了一個調度應用程序,其中我有一個表和dm類稱爲「用戶」,我迄今爲止已存儲了有關係統中所有用戶的所有信息。所有用戶都是內部用戶。每表超過1個對象類型

現在我需要爲外部用戶(客戶)實現登錄功能。

我的問題: 我現在想用我的表用戶,只是添加一個枚舉字段'user_type'(internal/external)。

我想創建一個名爲internal_user的數據映射器對象,另一個名爲exernal_user。

當我運行

$external_user = new External_user(); 
$external_user->get(); 

我只是想在我的用戶表中的行,其中USER_TYPE =外部。使用datamapper可以達到很好的效果嗎?

UPDATE:

我通過在DataMapper的類像這樣重寫get方法解決了這個問題:

class Internal_user(){ 
    [...] 
    function get() 
    { 
     $this->where('type', 'internal'); 
     return parent::get(); 
    } 
} 

現在這行:

$internal_user->get(); 

只返回與記錄值在我的user_type字段中。

+0

如果External_user從CI_Model擴展模型,那麼您可以在獲取附加這樣的事情方法 '$ this-> db-> select(array('col1','col2')); (數組('type'=>'external','othercondn'=> value)); return $ this-> db-> get(tablename) - > result();' – smitrp 2013-03-13 14:42:30

+0

如果想要使用CI_Model中的單個擴展模型實現此功能,則可以在擴展模型中使用兩種方法。 1)get_internal() - 在此更改函數參數的位置,如下所示: '$ this-> db-> where(array('type'=>'external','othercondn'=> value));' 2)get_external() - 在這裏你改變這個函數參數像這樣 '$ this-> db-> where(array('type'=>'internal','othercondn'=> value));' – smitrp 2013-03-13 14:46:00

+0

Thanks爲您的評論。我希望有2個不同的類/模型用於外部/內部,我不需要考慮類型參數。然而,鑑於你idéa我可能能夠擴展get() - 在我的模型中的方法是這樣的:function get(){$ this-> db-> where('type'=>'internal');父::得到(); } – jonixj 2013-03-13 15:24:33

回答

1

如果您想要使用CI_Model中的單個擴展模型實現此功能,則可以在擴展模型中使用兩種方法。

  1. 的get() - 在基本型號(它繼承CI_Model)你改變其中功能PARAMS這樣

    $this->db->select(array('col1', 'col2')); 
    
    $this->db->where(array('type' => 'internal', 'othercondn' => value));  
    
    return $this->db->get(tablename)->result(); 
    
  2. get_external() - 在這個模型中(它繼承BaseModel)你改變其中功能這樣

    $this->db->select(array('col1', 'col2')); 
    
    $this->db->where(array('type' => 'internal', 'othercondn' => value)); 
    
    return $this->db->get(tablename)->result(); 
    
    PARAMS
相關問題