2017-07-29 79 views
0

以下代碼應該搜索日期記錄。但是,不管我點擊,在其他的代碼分支將被處理RadioList似乎不被渲染

<?=$form->field($model, 'choice_date')->radioList(array(0=>'Before',1=>'After'))->label('Please, choose Datesearching!'); ?> 

型號:

<?php 
 

 
namespace backend\models; 
 

 
use Yii; 
 
use yii\base\Model; 
 

 
class RadioForm extends Model { // A new Class programmed by Thomas Kipp 
 

 
    public $choice_date; 
 

 

 
    public function rules() { 
 
     return [ 
 
      ['choice_date', 'boolean'], 
 
     ]; 
 
    } 
 

 
} 
 
?>

搜索類:

<?php 
 

 
namespace backend\models; 
 

 
use Yii; 
 
use yii\base\Model; 
 
use yii\data\ActiveDataProvider; 
 
use backend\models\Departments; 
 

 
class DepartmentsSearch extends Departments { 
 

 
    public function rules() { 
 
     return [ 
 
      [['department_id'], 'integer'], 
 
      [['department_name', 'department_created_date', 'department_status', 'companies_company_id', 'branches_branch_id'], 'safe'], 
 
     ]; 
 
    } 
 

 
    public function scenarios() { 
 

 
     return Model::scenarios(); 
 
    } 
 

 
    public function search($params) { 
 
     $query = Departments::find(); 
 
     $dataProvider = new ActiveDataProvider([ 
 
      'query' => $query, 
 
     ]); 
 

 
     $this->load($params); 
 

 
     if (!$this->validate()) return $dataProvider; 
 
     
 
     $model = new RadioForm(); 
 
     $model->load($params); 
 
     if ($model->choice_date == true) 
 
      $query->andFilterWhere(['<', 'department_created_date', $this->department_created_date]); 
 
     else 
 
      $query->andFilterWhere(['>', 'department_created_date', $this->department_created_date]); 
 
     $query->joinWith('companiesCompany'); 
 
     $query->joinWith('branchesBranch'); 
 

 
     $query->andFilterWhere(['like', 'department_name', $this->department_name]) 
 
       ->andFilterWhere(['like', 'companies.company_name', $this->companies_company_id]) 
 
       ->andFilterWhere(['like', 'branches.branch_name', $this->branches_branch_id]) 
 
       ->andFilterWhere(['like', 'department_status', $this->department_status]); 
 

 
     return $dataProvider; 
 
    } 
 

 
}

P.S:我只是很能影響日期過濾改變特性真/假,比如像這樣:

public $choice_date=true; 

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

任何想法,如何解決這一問題?

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

+0

你是說'if($ model-> choice_date == 0)'總是假? –

+0

準確。這部分永遠不會變成TRUE,所以日期總是會被過濾爲更大!我只是可以影響模型中的過濾,而不是用戶。所以我supose,財產將不會被渲染 – tklustig

+0

這很奇怪,因爲從你的代碼,該部分應該總是返回'true',不管選擇的選項。 –

回答

1

RadioForm模型有一個默認值0的屬性$choice_date(最初你寫public $choice_date = 0;)。在search()方法您寫道:

$model = new RadioForm(); 
if ($model->choice_date == 0) 
/* ... */ 

這在理論上應該總是返回true因爲你還沒有分配任何值呢。您創建了一個變量$choice_dateRadioForm模型,所以你還需要增加一個額外的行:

$model = new RadioForm(); 
$model->load($params); 

if ($model->choice_date == 0) 
/* ... */ 

假設$params有一個數組RadioForm模型,這將選定值加載到$choice_data屬性,並會產生影響。

+0

沒有效果(見上面的代碼)$ params將被提交,所以如何獲得RadioForm的數組? – tklustig

+0

現在我不能說,因爲它似乎一切正確。可能有你沒有提供的東西(如控制器,全視圖文件等)。我建議寫一封電子郵件,而不是更多的代碼,因爲評論很難解決。 –

+0

很高興。你的電子郵件地址是什麼? – tklustig