こんにちは、小さな問題があり、あなたが助けてくれることを願っています。モデルに 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 つの仮想属性が安全であるとマークされていることを確認することでした。
これが他の誰かに役立つことを願っています..