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

永远不要在CakePHP中显示某些记录,cakephp,find,conditional-statements,Cakephp,Find,Conditional Statements,我想从我的基地返回一些记录(例如用户角色) 我通常使用函数find()、findAll()等,我总是必须这样写“条件”:不显示角色admin(name!=admin)。 我的问题是,我如何能在RoleModel集合中为所有函数返回这个条件 对不起英语 再见 使用beforeFind()()回调进行此类操作。以下是我经常使用的一种方法,可确保只返回活动记录: function beforeFind( $queryData ) { $conditions = $queryData['condit

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

对不起英语

再见

使用
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;
}

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

我认为更好的解决办法是在你的hasMany关系中设置条件

// User.php Model:
var $hasMany = array('Role' => array('conditions' => array('name <>' => admin)));
//User.php模型:
var$hasMany=array('Role'=>array('conditions'=>array('name'=>admin));
反之亦然,您可以为您的榜样这样做:

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

array\u key\u exists($conditions,'active')应该由array\u key\u exists('active',$conditions')决定,但仍然不起作用。我设定了条件,但没有什么不同,很高兴它对你有效。为错误道歉。我不是在一个可以查找旧项目的盒子上。