代码之家  ›  专栏  ›  技术社区  ›  kicaj

从不在cakephp中显示某些记录

  •  3
  • kicaj  · 技术社区  · 15 年前

    我想从我的基地返回一些记录(如用户角色) 我通常使用函数find(),findall(),等等,并且我必须用这样的方式编写“条件”:不显示角色admin(name!=admin)。 我的问题是,我怎样才能在rolemodel集合中为所有函数返回这个条件。

    对不起英语!

    再见!

    2 回复  |  直到 15 年前
        1
  •  4
  •   Rob Wilkerson    15 年前

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

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

        2
  •  4
  •   Kien Pham    15 年前

    我认为一个更好的解决办法是为你们的关系设定条件。

    // 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)));
    
    推荐文章