2017-07-29 3 views
0

Der folgende Code sollte nach Datensätzen suchen. Aber was auch immer ich auf, else-Zweig in Code wirdRadioList scheint nicht gerendert zu werden

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

Modell:

<?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'], 
 
     ]; 
 
    } 
 

 
} 
 
?>

Searching-Klasse:

<?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 .: Ich bin nur in der Lage Datum-Filterung zu ändern Eigenschaft wahr/falsch, beispielsweise wie folgt zu beeinflussen:

public $choice_date=true; 

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Irgendwelche Ideen, wie man das Problem lösen?

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

+0

Sie sagen, dass 'if ($ model-> choice_date == 0)' immer falsch ist? –

+0

Genau. Dieser Teil wird niemals TRUE, daher wird das Datum immer für größere wie gefiltert! Ich kann nur die Filterung im Modell beeinflussen, nicht vom Benutzer. Also ich meine, Eigenschaft wird nicht gerendert – tklustig

+0

Das ist seltsam, weil von Ihrem Code dieser Teil immer 'true' zurückgeben sollte, unabhängig von der gewählten Option. –

Antwort

1

RadioForm Modell ein Attribut $choice_date, die einen Standardwert von 0 hat (ursprünglich geschrieben Sie public $choice_date = 0;). In search() Methode, die Sie schrieb:

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

die in der Theorie sollte immer Rückkehr true, weil Sie alle Werte, um es noch nicht zugeordnet haben. Sie haben eine Variable $choice_date in RadioForm Modell, so dass Sie auch eine zusätzliche Zeile hinzufügen müssen:

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

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

Unter der Annahme, dass $params hat ein Array für RadioForm Modell, wird dies gewählten Wert $choice_data Attribut laden und wird einen Einfluss haben.

+0

Kein Effekt (siehe Code oben) $ params wird committed, also wie bekommt man ein Array für RadioForm? – tklustig

+0

Ich kann es vorerst nicht sagen, weil es scheint, dass alles in Ordnung ist. Es könnte etwas geben, das Sie nicht zur Verfügung gestellt haben (wie Controller, Vollansichtsdatei usw.). Ich schlage vor, stattdessen eine E-Mail mit mehr Code zu schreiben, da es schwierig zu lösen ist. –

+0

Gerne. Was ist deine E-Mail-Adresse? – tklustig

Verwandte Themen