2013-12-09 43 views
1

我是新的yii。我想通過模型中的屬性(字段名稱)進行搜索,並需要通過zii.widgets.grid.CGridView在視圖頁面或其他頁面中查看。YII模型::: CGridView使用標準按特定屬性搜索

  1. 我怎麼能在模型由findByAttribute()
  2. 這樣我們就可以顯示按屬性的結果沒有任何搜索

這裏是我的模型功能,但它是創建一個搜索()函數不工作.. ::錯誤未定義的變量:pp_requisitionno

public function searchView() 
{ 

    $criteria=new CDbCriteria(); 
    $criteria->select= 'pp_requisitionno'; 
    $criteria->addSearchCondition('pp_requisitionno',$pp_requisitionno); 
    $criteria->compare('pp_requisitionno',$this->pp_requisitionno); 
    $criteria->condition = 'pp_requisitionno=:pp_requisitionno'; 
    $criteria->params = array(':pp_requisitionno'=>Yii::app()->Request->Getpost('pp_requisitionno')); 
    $model = Requisitiondt::model()->find(); 
    return new CActiveDataProvider($this, array(
     'criteria'=>$criteria, 
    )); 
} 

任何幫助,請...

回答

2

添加'filter' => $model,它可能會更加有用的定義可以根據不同的搜索中重複使用的通用搜索功能。這可以通過以下方式進行:

/** 
    * Retrieves a list of models based on the current search/filter conditions. 
    * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions. 
    */ 
    public function search() { 
     $criteria = new CDbCriteria; 
//Define all your searchable fields here 
     $criteria->compare('t.title', $this->title, true); 
     $criteria->compare('t.type', $this->type, true); 
     $criteria->compare('t.published', $this->published, true); 
     $criteria->compare('category.id', $this->category_id, true); 
//Add any other criteria, like the default sort order etc. 

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

然後在你的控制器,你可以使用這樣的搜索;

pubic function actionSearch(){ 
$model = new Requisitiondt; 
if (isset($_POST)){ 
$model->attributes = $_POST; 
$dataProvider = $model->search(); 
$this->render('searchView', array('dataProvider' => $dataProvider)); 
} 
} 

視圖'searchView'然後看起來像這樣;

<?php 
$this->widget('CGridView', array(
'dataProvider' => $dataProvider, 
'columns' => array(
//Add in whatever columns you want the grid to show 
) 
)); 
?> 

很明顯,您需要替換自己的模型名稱和字段名稱,但這是一般的想法。這種方式將搜索您在POST請求中包含的任何屬性,並且更加可重用。

+0

如何根據您的答案顯示特定屬性「類型」的結果?請幫助我 –

+0

這是從正在處理的現有項目複製的一般示例。您需要替換您提交的提交的姓名,例如,在我放置t.type,t.published和t.title的地方,您需要輸入自己的字段名稱,例如, t.pp_requisitionno。 –

+0

請分享您的查看代碼.... –

0

您需要在您的模型中使用關係,請閱讀here

然後在你的GridView控件選擇陣列