ベース(ユーザーロールなど)からいくつかのレコードを返したいのですが、通常は関数find()、findAll()などを使用し、常に次のように「条件」を記述する必要があります。ロールadmin(name! = admin)。私の質問は、すべての関数に設定されたRoleModelで、この条件でどのように返されるかということです。
英語でごめんなさい!
さよなら!
ベース(ユーザーロールなど)からいくつかのレコードを返したいのですが、通常は関数find()、findAll()などを使用し、常に次のように「条件」を記述する必要があります。ロールadmin(name! = admin)。私の質問は、すべての関数に設定されたRoleModelで、この条件でどのように返されるかということです。
英語でごめんなさい!
さよなら!
この種のことには、 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;
}
それは少し外れているので、構文は正確ではないかもしれませんが、それはあなたに最初の何かを与えるはずです。おそらく、いくつかの関数呼び出しの引数の順序を除いて、すべてが順調だと思います。とにかく、それは近いはずです。
より良い解決策は、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)));