2016-11-28 4 views
0

Как загрузить не только атрибуты DB, но и поля с loadMultipe?Yii2. Модель :: loadMultipe. Как загрузить поля классов тоже?

У меня есть такая модель

class Person extends ActiveRecord 
{ 

    public $birthdate_month; 

    public $birthdate_day; 

    public $birthdate_year; 

... 

    public function rules() 
    { 
     return [ 
      ... 
      [['birthdate_month', 'birthdate_day', 'birthdate_year'], 'integer'], 
      [['birthdate_month', 'birthdate_day', 'birthdate_year'], 'required'] 
     ]; 
    } 

// I store data as one DATA field in DB and than use such methods to show it to the user 

    public function afterFind() 
    { 
     if (isset($this->birthdate)) { 
      $date = Carbon::createFromFormat('Y-m-d', $this->birthdate); //just a data-manipulation library 

      $this->birthdate_month = $date->month; 
      $this->birthdate_day = $date->day; 
      $this->birthdate_year = $date->year; 
     } 

     return parent::afterFind(); 
    } 



    public function beforeValidate() 
    { 
     $date   = Carbon::create($this->birthdate_year, $this->birthdate_month, $this->birthdate_day); //just a data-manipulation library 
     $this->birthdate = $date->toDateString(); 

     return parent::beforeValidate(); 
    } 
} 

И такой взгляд

<?php $form = ActiveForm::begin() ?> 

<?php foreach ($children as $i => $child): ?> //there are multiple persons (children) 

... 

<?=$form->field($child, '[]birthdate_month', [...])->dropDownList([ 
        '1' => 'January', 
        ... 
       ])?> 

... 

<?php endforeach; ?> 

... 

<?=Html::submitButton('Save', ['class' => 'ui primary button big'])?> 
... 

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

В контроллере

Person::loadMultiple($children, Yii::$app->request->post()); 

заполняет атрибуты, но поля еще нуль. Я нуждаюсь в них, потому что я использую его для concat и создания одного поля даты в БД. Как их загрузить?

+0

заявляет, что поле также в общественном –

+0

@vishva но публика) –

ответ

0

Должно быть добавлен итератором пропускания массива в представлении

<?=$form->field($child, "[$i]birthdate_month", [...])->dropDownList([ 
        '1' => 'January', 
        ... 
       ])?> 
0

Вы можете использовать Datepicker виджета поставить дату рождения, которая включала день, месяц и год, этот виджет календарь

+0

я знаю, но мой клиент настоял на таком способе ввода данных :) –

0

Попробуйте

$formDetails = Yii::$app->request->post('Person', []); 
foreach ($formDetails as $i => $value) 
{ 
    $model = new Person(); 
    $model->setAttributes($value); 
    $models[] = $model; 
} 
+0

Точно, какая внутренняя функция Yii2 делает. –

 Смежные вопросы

  • Нет связанных вопросов^_^