2

CGridView を使用する標準的な Gii 作成の管理ビューがあり、ユーザー テーブル データを表示しています。

問題は、「root」という名前のユーザーが表示されてはならないことです。

静的な where 条件 " ... and username !='root' " を追加する方法はありますか?

admin.php [ビュー]

'columns'=>array(
    'id',
    'username',
    'password',
    'realname',
    'email',
            .....

user.php [モデル]

    public function search()
{
    // Warning: Please modify the following code to remove attributes that
    // should not be searched.

    $criteria=new CDbCriteria;

    $criteria->compare('id',$this->id);
    $criteria->compare('username',$this->username,true);
    $criteria->compare('password',$this->password,true);
    $criteria->compare('realname',$this->realname,true);
    $criteria->compare('email',$this->email,true);

    ......


    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}
4

2 に答える 2

7

次のようにCDbCriteria の addConditionを使用できます。

 $criteria->addCondition("username !='root'");
于 2012-10-08T14:13:10.523 に答える
6

あなたの最良の選択肢は、基本的に保存された where 句 (または既存の基準の他の変更) であるYii スコープを使用することです。これは、アプリ全体に適用でき、基準が後で変更された場合に 1 か所で変更するだけで済みます。

それらをさらにクールにしているのは、どの基準句が何によって変更されているかを追跡する必要なく、他のスコープ/基準の変更 (たとえば、グリッド内のユーザーから) と一緒にストリングできることです。

あなたの状況に当てはまるかもしれないいくつかの例。コントローラーには、おそらく次のようなものがあります。

$users = User::model()->search()->findAll();

アスガロスの答えは、あなたが表面的に求めていたものに答えます。しかし、スコープを使用してできること (そして簡単にできること) は他にもたくさんあります。

以下をユーザーモデルに追加すると:

class User extends CActiveRecord
{
    ......
    public function scopes()
    {
        return array(
            'active'=>array(
                'condition'=>'active=1',
            ),
            'isAdmin'=>array(
                'condition'=>'isAdmin=1',
            ),
        );
    }
}

次に、コントローラーで次のようにアクティブなユーザーを取得できます (ユーザーのフィルターが適用されたまま)。

$users = User::model()->active()->search()->findAll();

または、次のように、すべてのアクティブな管理者ユーザーを取得できます (gridview 基準によってフィルター処理されることはありません)。

$users = User::model()->active()->isAdmin()->findAll();

デフォルトのスコープは、同じ考え方の単なる拡張です:

class User extends CActiveRecord
{
    public function defaultScope()
    {
        return array(
            'condition'=>"username != 'root'",
        );
    }
}

isAdmin スコープがルート ユーザーを返す前に、デフォルト スコープを適用すると、作成するすべての User::model() クエリに適用されるため、返されるモデルからルート ユーザーが除外されます。

于 2012-10-08T20:32:46.220 に答える