永远不要在CakePHP中显示一些记录

时间:2010-02-25 18:25:11

标签: cakephp find conditional-statements

我想从我的基地返回一些记录(例如用户角色) 我通常使用函数find(),findAll()等,我总是必须用这样写'条件':不显示角色admin(name!= admin)。 我的问题是,如何在RoleModel中为所有函数设置将返回此条件。

抱歉英语!

再见!

2 个答案:

答案 0 :(得分: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;
}

这有点偏离袖口,所以语法可能不准确,但它应该给你一些东西开始。我认为除了一些函数调用中的参数顺序之外,一切都是有序的。无论如何,它应该是接近的。

答案 1 :(得分: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)));