Никогда не отображать некоторые записи в CakePHP - PullRequest
3 голосов
/ 25 февраля 2010

Я хотел бы вернуть некоторые записи из моей базы (например, роли пользователей) И я обычно использую функции find (), findAll () и т. Д., И я всегда должен писать «условия», например: не отображать роль admin (name! = Admin). У меня вопрос, как я могу в RoleModel установить для всех функций будет возвращаться с этими условиями.

Извините за английский!

Bye!

Ответы [ 2 ]

4 голосов
/ 25 февраля 2010

Я думаю, что лучшим решением было бы установление условия в ваших отношениях 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)));
4 голосов
/ 25 февраля 2010

Используйте обратный вызов 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;
}

Это немного не так, поэтому синтаксис может быть не точным, но он должен дать вам кое-что для начала. Я думаю, что все в порядке, за исключением, возможно, порядка аргументов в нескольких вызовах функций. Во всяком случае, это должно быть близко.

...