2010-02-25 3 views
3

베이스에서 일부 레코드를 반환하고 싶습니다. (예 : 사용자 역할) 일반적으로 find(), findAll() 등의 함수를 사용하며 항상 '조건'을 사용해야합니다. 이렇게 : 역할 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, 완벽하게 작동한다! 수정 : $ queryData를 반환하려면 true 반환 – 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))); 
관련 문제