亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 yii2 模型上添加過濾器

如何在 yii2 模型上添加過濾器

PHP
www說 2023-08-19 17:31:41
我有一個用于從視圖讀取數據的查詢。然后,我對此應用一個不相關的 sql 過濾器,以取出我不需要的模型,然后返回一個 arrayDataProvider 實例。我應用的過濾器是促銷期。但是,當我將查詢參數傳遞給該搜索模型時,它不起作用。我該如何解決這個問題?以下是從視圖中選擇數據的代碼:public function search($params, $promotion_period){    $query = StaffEmploymentListView::find()->alias('LIST')            ->joinWith(['employment EMPLOYMENT'])            ->where(['LIST.EMPLOYMENT_TYPE' => 'PROMOTION']);       $query->andFilterWhere(['like', 'DEPT_NAME', $this->DEPT_NAME])            ->andFilterWhere(['like', 'COL_NAME', $this->COL_NAME])            ->andFilterWhere(['like', 'GRADE_DESCR', $this->GRADE_DESCR])            ->andFilterWhere(['like', 'DESG_NAME', $this->DESG_NAME])            ->andFilterWhere(['like', 'TRIBE_NAME', $this->TRIBE_NAME])            ->andFilterWhere(['like', 'GENDER', $this->GENDER])            ->andFilterWhere(['like', 'HOME_DISTRICT', $this->HOME_DISTRICT]);    $allModels = [];    if($promotion_period !== null){        $to_date = strtotime($promotion_period['to_date']);        $from_date = strtotime($promotion_period['from_date']);        foreach ($query->all() as $model)        {            $effective_date = strtotime($model->employment->APPOINT_DATE);            if ($effective_date >= $from_date && $effective_date <= $to_date){                $allModels[] = $model;            }        }    }    else{        foreach ($query->all() as $model)        {            $allModels[] = $model;        }    }    $dataProvider = new ArrayDataProvider([        'allModels' => $allModels,        'pagination' => [            'pageSize' => 20,        ],        'sort' => false    ]);    $this->load($params);    if (!$this->validate()) {        return $dataProvider;    }        return $dataProvider;}以下是 URL 中的參數轉儲:['from_date' => '''to_date' => '''PromotedStaffSearch' => [    'COL_NAME' => 'CENTRAL ADMINISTRATION'    'DEPT_NAME' => ''    'GRADE_DESCR' => ''    'DESG_NAME' => ''    'GENDER' => ''    'TRIBE_NAME' => ''    'HOME_DISTRICT' => '']]
查看完整描述

1 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

據我了解,您試圖查找between指定時間段(如果已設置)的所有模型。


嘗試這個:


public function search($params, $promotion_period)

{

? ? $query = StaffEmploymentListView::find()->alias('LIST')


? ? ? ? ? ? ->joinWith(['employment']) //Here should be your relation name from StaffEmploymentListView model?


? ? ? ? ? ? ->where(['LIST.EMPLOYMENT_TYPE' => 'PROMOTION']);

? ?

? ??


? ? $dataProvider = new ActiveDataProvider([

? ? ? ? 'query' => $query,

? ? ? ? 'pagination' => [

? ? ? ? ? ? 'pageSize' => 20,

? ? ? ? ],

? ? ? ? 'sort' => false

? ? ]);


? ? $this->load($params);


? ? if (!$this->validate()) {

? ? ? ? return $dataProvider;

? ? }


? ? $query->andFilterWhere(['like', 'DEPT_NAME', $this->DEPT_NAME])

? ? ? ? ? ? ->andFilterWhere(['like', 'COL_NAME', $this->COL_NAME])

? ? ? ? ? ? ->andFilterWhere(['like', 'GRADE_DESCR', $this->GRADE_DESCR])

? ? ? ? ? ? ->andFilterWhere(['like', 'DESG_NAME', $this->DESG_NAME])

? ? ? ? ? ? ->andFilterWhere(['like', 'TRIBE_NAME', $this->TRIBE_NAME])

? ? ? ? ? ? ->andFilterWhere(['like', 'GENDER', $this->GENDER])

? ? ? ? ? ? ->andFilterWhere(['like', 'HOME_DISTRICT', $this->HOME_DISTRICT]);


? ? //$allModels = [];


? ? if(is_array($promotion_period) && isset($promotion_period['to_date']) && isset($promotion_period['from_date'])){

? ? ? ? //also check if you $promotion_period params are not empty

? ? ? ? $to_date = strtotime($promotion_period['to_date']);

? ? ? ? $from_date = strtotime($promotion_period['from_date']);


? ? ? ? $query->andFilterWhere(['BETWEEN', 'EMPLOYMENT_TABLE_NAME.APPOINT_DATE', $from_date, $to_date]);


? ? }

? ??

? ? //Now you can get all your filtered models as array like this:

? ? return $dataProvider->getModels();

}


查看完整回答
反對 回復 2023-08-19
  • 1 回答
  • 0 關注
  • 128 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號