2010-02-25 44 views
3

我想從我的基地返回一些記錄(例如,用戶角色) 我通常使用find(),findAll()等函數,而且我總是必須寫'conditions'像這樣:不顯示角色admin(name!= admin)。 我的問題是,我怎麼能在RoleModel中設置所有函數都會返回這個條件。不要在CakePHP中顯示一些記錄

對不起,對不起英文!

再見!

回答

4

使用beforeFind()http://book.cakephp.org/view/680/beforeFind)回調這種事情。這裏有一個我從一次使用的時間,以確保僅返回活動記錄:

function beforeFind($queryData) 
{ 
    $conditions = $queryData['conditions']; 

    if(!is_array($conditions)) { 
    if(!$conditions) { 
     $conditions = array(); 
    } 
    else { 
     $conditions = array($conditions); 
    } 
    } 

    if(!array_key_exists($conditions, 'active') && !isset($conditions[$this->alias . '.active'])) { 
    $conditions[$this->alias . '.active'] = 1; 
    } 

    return true; 
} 

這是一個有點即興,所以語法可能不準確,但它應該給你的東西開始。我認爲一切都是按順序進行的,也許除了幾個函數調用中的參數順序外。無論如何,它應該接近。

+0

array_key_exists($條件下, '主動')仍然array_key_exists( '主動',$條件)應該,但沒有按沒有工作。我設置了條件,但沒有不同的 – kicaj

+0

okey,完美的作品! 修復:返回true返回$ queryData – kicaj

+0

很高興爲你工作。抱歉的不準確。我不在一個可以查看舊項目的框中。 –

4

我認爲一個更好的解決方案是設置hasMany關係中的條件。

// User.php Model: 
var $hasMany = array('Role' => array('conditions' => array('name <>' => admin))); 

,反之亦然,你可以爲你的榜樣做到這一點:

// Role.php Model: 
var $belongsTo = array('User' => array('conditions' => array('User.name <>' => admin)));