2015-07-31 10 views
7

में डेटाप्रोवाइडर के लिए एक शर्त निर्धारित करें, मैं केवल नियंत्रक में एक ही क्रिया के लिए एक शर्त निर्धारित करने के लिए देख रहा हूं, इसलिए मैं अपना search मॉडल नहीं बदलना चाहता हूं।विशिष्ट नियंत्रक विधि

मेरे कोड इस तरह दिखता है:

public function actionRoles() 
    { 
     $searchModel = new EmployeeSearch(); 
     //$searchModel->query()->where('role <> regular'); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

     return $this->render('view_role', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 
    } 

commmented पंक्ति मेरी हालत ($searchModel->query()->where('role <> regular');), यह बहुत सीधा है पता चलता है, लेकिन मैं एक समाधान है कि ऑनलाइन काम करता है नहीं मिली है।

उत्तर

2

आप इस तरह से

कोशिश कर सकते हैं:

संदर्भ के लिए मैं उन की कोशिश की

खोजें मॉडल में:

$dataProvider = $searchModel->search(Yii::$app->request->queryParams, $role = 'regular'); 

खोज मॉडल में

if($role == 'regular') { 
    $query->andWhere(['<>', 'role', $this->role]); 
} 

एक और तरीका है, लेकिन समस्या की तरह अन्य पैरामीटर पारित:

$query->andFilterWhere(['<>', 'role', $this->role]); 

दूसरा रास्ता की तरह दूसरा पैरामीटर पारित फ़िल्टर समय में:

$dataProvider = $searchModel->search(Yii::$app->request->queryParams+['EmployeeSearch' => ['<>', 'role' =>'regular']]); 
+0

मैं केवल अब तक (है दोपहर के भोजन के लिए जाने के लिए, बाकी के बाद कोशिश करेंगे) आपके आखिरी एक का परीक्षण किया, जो 'भूमिका' नियमित रूप से प्रत्येक प्रविष्टि देता है। बाकी पर वापस रिपोर्ट करेंगे। – Spurious

+1

मैं मॉडल को संशोधित नहीं करना चाहता क्योंकि मैं इसे कई स्थानों पर उपयोग कर रहा हूं और यह केवल एक दृश्य है, इसलिए मॉडल में कोई भी बदलाव परेशान है। – Spurious

0

आप इस कोशिश कर सकते हैं:
SearchModel:

$searchModel = new EmployeeSearch(); 
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); 


    $query->andFilterWhere(['<>', 'role'=>'regular']); 
return $this->render('view_role', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 

कृपया यह भी इस लिंक पर जाएं: http://www.yiiframework.com/doc-2.0/guide-output-data-providers.html

+0

यह रिटर्न: 'पीएचपी सूचना - Yii \ आधार \ ErrorException अपरिभाषित चर: query' – Spurious

+0

भी वापसी अनुभाग –

+0

में 'जिज्ञासा' => $ क्वेरी शामिल क्योंकि $ क्वेरी एक परिभाषित मॉडल नहीं है यह काम नहीं करता। – Spurious

10

ठीक है, मैं यह किया गया, यह इस तरह से मेरे लिए काम करता है:

public function actionRoles() 
{ 
    $searchModel = new EmployeeSearch(); 

    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
    $dataProvider->sort = ['defaultOrder' => ['role'=>SORT_ASC, 'fullname'=>SORT_ASC]]; 
    $dataProvider->query->where('employee.role <> \'regular\''); 

    return $this->render('view_role', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 
} 

सी काफी जटिल और मॉडल में इसे करने से शायद बेहतर होगा, लेकिन मैं केवल इसे इस क्रिया में उपयोग करना चाहता हूं और उसी search मॉडल के साथ अन्य कार्रवाइयों का एक गुच्छा है लेकिन अलग-अलग स्थितियां हैं।

0

इस समाधान

$searchModel = new ModelnameSearch 
      (
       [ 'Attribute' => 1, 
       'SecondAttribte' => '1', 
       ] 
      ); 
7

आप इसे नियंत्रक

$searchModel = new ModelSearch(); 
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
$dataProvider->query->andWhere(['lang'=>'ENG']); 
0

में इस तरह से कर सकते हैं की कोशिश करो इस का उपयोग करते हुए बहु पैरामीटर की तरह का प्रयास करें -

$searchModel = new YourSearchModel(); 
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
$dataProvider->query->where('field1 = :field1 AND field2 = :field2', [':field1' => 1, ':field2' => 'A']); 
संबंधित मुद्दे