3

ベース(ユーザーロールなど)からいくつかのレコードを返したいのですが、通常は関数find()、findAll()などを使用し、常に次のように「条件」を記述する必要があります。ロールadmin(name! = admin)。私の質問は、すべての関数に設定されたRoleModelで、この条件でどのように返されるかということです。

英語でごめんなさい!

さよなら!

4

2 に答える 2

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

それは少し外れているので、構文は正確ではないかもしれませんが、それはあなたに最初の何かを与えるはずです。おそらく、いくつかの関数呼び出しの引数の順序を除いて、すべてが順調だと思います。とにかく、それは近いはずです。

于 2010-02-25T19:13:09.600 に答える
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)));
于 2010-02-25T20:53:56.613 に答える