1

こんにちは、小さな問題があり、あなたが助けてくれることを願っています。モデルに 4 つの仮想属性を作成しています。

start_time_hr start_time_mn

end_time_hr end_time_mn

以下を使用します。

/**
     * Retrieves hour portion of start_time
     * @return string
     */
    public function getstart_time_hr(){
        $str = explode(':', $this->start_time);
        return $str[0];
    }

これは主にユーザー インターフェイス用であり、ユーザーは一連のドロップダウン ボックスを介して開始時刻と終了時刻を設定できます。これは機能しますが、問題は選択をDBに書き戻すことです。

現在、モデルにこれがあります:

public function setstart_time_hr($value){
        $this->start_time_hr = $value;
    }
public function setstart_time_mn($value){
        $this->start_time_mn = $value;
    }

public function beforeSave(){
        if(!empty($this->start_time_hr)){
            $this->start_time = $this->start_time_hr.':'.$this->start_time_mn;
        }
        return parent::beforeSave();
    }

私の保存フォームアクションは次のとおりです。

public function actionAdminChangeShift($calId){
          $model = CalShift::model()->findByPk($calId);
          $model->attributes = $_POST['CalShift'];
          $model->save();
          //$this->redirect(array('CalDialog','calID'=>$calId,'eventType'=>'click'));

      }

set 関数で start_time 変数を再構築しようとしましたが、これも機能しませんでした。私は何が欠けていますか?from から変数を手動で組み合わせて、それをモデルに渡す必要がありますか?

$model->start_time = $_POST['CalShift']['start_time_hr'].':'.$_POST['CalShift']['start_time_mn'];

それは大きな問題ではありませんが、通常の保存機能の一部として、この組み合わせをモデルで実行したいと考えています。

補足: 時間が DB '01:30' に格納されている形式で渡され、個別の値としてではなく、それに応答する必要がある場合があります。

再度、感謝します。

編集:

setstart_time_hr 関数を次のように変更することで、これを機能させることができました。

public function setstart_time_hr($value){
        $str = explode(':', $this->start_time);
        $this->start_time = $value.':'.$str[1];
    }

しかし、それを使用しても機能しません

$model->attributes = $_POST['CalShifts']

次のようにして、値を手動で割り当てる必要があります。

$model->start_time_hr = $_POST['CalShift']['start_time_hr'];
$model->start_time_mn = $_POST['CalShift']['start_time_mn'];

$model->attributes を機能させるための回避策を知っている人はいますか?

再度、感謝します

編集#2

私は自分の質問に答えることができないので、ここに答えがあります:

これに対する修正はモデルにありました:

public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            .......
            array('notice_sent_date, start_time_hr, start_time_mn', 'safe'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            ....
        );
    }

public function setstart_time_hr($value){
    $str = explode(':', $this->start_time);
    $this->start_time = $value.':'.$str[1];
}
public function setstart_time_mn($value){
    $str = explode(':', $this->start_time);
    $this->start_time = $str[0].':'.$value;
}

動作させるための鍵$model->attributes = $_POST['CalShifts']は、2 つの仮想属性が安全であるとマークされていることを確認することでした。

これが他の誰かに役立つことを願っています..

4

1 に答える 1

3

これに対する修正は、モデルに次のように追加されました。

public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            .......
            array('notice_sent_date, start_time_hr, start_time_mn', 'safe'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            ....
        );
    }

public function setstart_time_hr($value){
    $str = explode(':', $this->start_time);
    $this->start_time = $value.':'.$str[1];
}
public function setstart_time_mn($value){
    $str = explode(':', $this->start_time);
    $this->start_time = $str[0].':'.$value;
}

動作させるための鍵$model->attributes = $_POST['CalShifts']は、安全とマークされた2つの仮想属性を確保することでした。

これが他の誰かに役立つことを願っています。

于 2012-04-26T00:44:15.820 に答える