2016-05-10 5 views
0

誰かが助けてくれるのだろうかと疑問に思います。Yiiフィルターが機能しない

私は同じコントローラー/モデルを使用していますが、異なるモデル機能を使用する私のYiiアプリケーションで2ページあります。私の最初のページは、デフォルトのsearch()をモデルとして使用するかなり標準的な 'admin'ページです(これはうまく機能します)。それにIDが渡されます(URLパラメータから取得されます)。これはうまく動作しますが、ページのフィルタはうまくいかない。

コントローラでは、ID変数を正しく渡さないためだと思います???

ここにいくつかのコードがあります。

モデル:

public function searchByEvent($event_id) { 
     $criteria = new CDbCriteria; 

     $criteria->compare('id', $this->id, true); 
     $criteria->compare('event_id', $this->event_id, true); 
     $criteria->compare('status_id', $this->status_id, true); 
     $criteria->compare('checkin_status_id', $this->checkin_status_id, true); 
     $criteria->compare('guest_of_user_id', $this->guest_of_user_id, true); 
     $criteria->compare('user_id', $this->user_id, true); 
     $criteria->compare('assign_group', $this->assign_group, true); 

     $criteria->with = 'user'; 
     $criteria->compare('user.forename', $this->user_forename, true); 
     $criteria->compare('user.surname', $this->user_surname, true); 
     $criteria->compare('user.company', $this->user_company, true); 
     $criteria->order = 'user.surname ASC'; 
     $criteria->condition = "event_id = :event_id"; 
     $criteria->params=(array(':event_id'=>$event_id)); 

     return new CActiveDataProvider($this, array(
      'criteria' => $criteria, 
      'pagination'=>array('pageSize'=>50), 
     )); 
    } 

コントローラー:

public function actionAdminByEvent() { 

     $model = new EventAttendees('searchByEvent'); 
     $model->unsetAttributes(); // clear any default values 
     if (isset($_GET['EventAttendees'])) 
      $model->attributes = $_GET['EventAttendees']; 

     $this->render('webroot.themes.'.Yii::app()->name.'.views.adminEventAttend.adminByEvent', array(
      'model' => $model, 
     )); 
    } 

見ます。

$event_id = Yii::app()->getRequest()->getParam('event_id'); 
this->widget('booster.widgets.TbGridView', array(
    'id' => 'event-attendees-grid', 
    'dataProvider' => $model->searchByEvent($event_id), 
    'pager' => array(
       'class' => 'booster.widgets.TbPager', 
       'displayFirstAndLast' => true, 
     ), 
    'filter' => $model, 
    'template'=>'{summary}{pager}{items}{pager}', 
    'selectableRows' => 0, 
    'selectionChanged' => 'function(id){ location.href = "' . $this->createUrl('view') . '/id/"+$.fn.yiiGridView.getSelection(id);}', 
    'columns' => array(... 

誰でもフィルタが間違っているのを見たり、検索の手順が見つからないことがありますか?

+0

あなたのモデルをどうやってルールメソッドを表示するかを教えてください – georaldc

答えて

1

私が推測したのは、モデルの属性が「searchByEvent」シナリオの下にあるときに「安全」と宣言されていないからです。 giiを使用してモデルのルールメソッドを見た場合、「検索」シナリオを使用する場合、すべての属性を「安全」とマークするエントリがあります。コントローラーアクション($model = new EventAttendees('searchByEvent'))で「searchByEvent」という別のシナリオを使用していて、このシナリオであなたの属性に安全とフラグを付ける新しいルールを作成しなかった場合、質量割り当て行($model->attributes = $_GET['EventAttendees'])は、シナリオレスルール。

それはしかしそうではありません、あなたが見たいかもしれない別のものは、以下を変更している場合:

$criteria->condition = "event_id = :event_id"; 
$criteria->params=(array(':event_id'=>$event_id)); 

$criteria->addColumnCondition(array('event_id' => $event_id)) 

へのあなたのparamsラインは、他のすべてを上書きされる可能性があります新しいパラメータを現在のセットにマージしていないため、前のすべての比較ステートメントで設定されたパラメータ。適切なCDbCriteriaメソッドを使用すると、これを回避できます。

+0

searchByEventシナリオを安全ルールに追加していなかったので、両方の組み合わせのように見えます。これは修正されませんでしたが、addColumnConditionへの変更を実装すると修正されました。これらのシナリオルールを削除してもうまくいきません。本当にhelp @georaldcに感謝します – gsusonline

関連する問題