2017-08-07 37 views
0

工作,我清理了一下,所以這個問題是爲什麼searchmodel返回房間與ID = 30時,我沒有說要
searchModel代碼不是在條件不在Yii2

public function search($params) 
{ 
    $ids = []; 
    $ids[]=30; 
    $query = room::find(); 
    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
    ]); 
    $this->load($params); 
    if (!$this->validate()) { 

    } 
$query->andFilterWhere([ 
     'price' => $this->price, 
     'category_id' => $this->category_id, 
     'id' => $this->id, 
     'ci_id'=>$this->ci_id; 

    ]); 
    $query->andFilterWhere(['not in','id',$ids]); 
    return $dataProvider; 
} 

控制器操作這裏是控制器行動我不認爲有什麼奇怪的,只是張貼萬一有什麼問題。

public function actionIndex() 
{ 
    $searchModel = new roomSearch(); 
    //$user = Yii::$app->user->identity; 

    if ($searchModel->load(Yii::$app->request->post())) { 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

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

    // 

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


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

,並顯示房間的視圖代碼如下代碼:

<?php \yii\widgets\Pjax::begin(['timeout' => 30000, 'clientOptions' => ['container' => 'pjax-container']]); 
?> 

    <?php $form = ActiveForm::begin([ 'action' => ['index'], 
'method' => 'get','options' => ['data-pjax' => true ],]); ?> 
<?= $form->field($searchModel, 'category_id')->dropdownList(MtCat::getHierarchy(false, [], false, false),['onchange'=>'this.form.submit()','prompt' => 'Όλες οι κατηγορίες']); ?> 
<?= $form->field($searchModel, 'ci_id')->dropdownList(City::getList(),['onchange'=>'this.form.submit()','prompt' => 'Όλες οι περιοχές']); ?> 

    <?php ActiveForm::end(); ?> 
</br> 


<?= 

ListView::widget([ 

    'layout' => "{pager}\n{summary}\n<div class='all-items'>{items}</div>\n{pager}", 

    //'layout' => "{pager}\n<div class='all-items'>{items}</div>\n{pager}", 

    'summary' => sprintf('<div class="summary"><b>%s</b> αποτελέσματα δωματίων</div>', $dataProvider->totalCount), 

    'dataProvider' => $dataProvider, 

    'showOnEmpty' => false, 


    'itemOptions' => ['class' => 'item'], 

    'itemView' => '_img', /* function ($model, $key, $index, $widget) { return Html::a(Html::encode($model->id), ['view', 'id' => $model->id]); }, */ 

    'pager' => [ 

     'maxButtonCount' => ceil($dataProvider->totalCount/$dataProvider->pagination->pageSize), 

    ], 

]); 

?> 
<?php \yii\widgets\Pjax::end(); ?> 
+1

'$ query-> where('0 = 1');'是什麼意思? – paul

+0

不知道從以前的開發:P – Somerandomwebdev

+0

它只是什麼都沒有返回:P它說在上面的評論 – Somerandomwebdev

回答

0

你必須$query->where('0=1');後關閉if聲明,因爲當你的模型是不是唯一的過濾有效期爲$model->validate()。它應該是這樣的:

public function search($params) 
{ 
    $ids = []; 
    $ids[]=30; 
    $query = room::find(); 
    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
    ]); 
    $this->load($params); 
    if (!$this->validate()) { 

    } // here you need close if condition 
    $query->andFilterWhere([ 
     'price' => $this->price, 
     'category_id' => $this->category_id, 
     'id' => $this->id, 
     'ci_id'=>$this->ci_id; 

    ]); 

    $query->andFilterWhere(['not in','id',$ids]); 

    return $dataProvider; 
} 
+0

我改變了它,它仍然返回ID = 30的房間 – Somerandomwebdev

+0

你可以用當前代碼更新問題嗎? – Yupik

+0

我在這裏新在哪裏貼它? – Somerandomwebdev

0

原因是你唯一的選擇

ROOM_ID

這就是爲什麼它沒有看到

ID

您可以像這樣改變代碼的前幾行。

$ids = []; 
$ids[] = 30; 
$results = Yii::$app->db->createCommand('select id,room_id from y2gall_reservations')->queryAll(); 
$query = room::find(); 
+0

Room_id是一個外鍵om保留表,id是房間表中的密鑰 – Somerandomwebdev

+0

Hes在此代碼中不使用'$ results'變量 – Yupik

0

你的模型搜索功能應:從第一andFilterWhere功能

public function search($params) 
{ 
    $ids = []; 
    $ids[]=30; 
    $query = room::find(); 
    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
    ]); 
    $this->load($params); 
    if (!$this->validate()) { 

    } 
    $query->andFilterWhere([ 
    'price' => $this->price, 
    'category_id' => $this->category_id, 

    'ci_id'=>$this->ci_id; 

    ]); 
    $query->andFilterWhere(['not in','id',$ids]); 
    return $dataProvider; 
} 

刪除ID PARAM。