イベントの開始日を更新できるイベント モデルがあります。私はミューテーターのためにこれを持っています:
protected function setStartAttribute($value)
{
$date = \Datetime::createFromFormat('d.m.Y H:i:s', $value);
$this->attributes['start'] = $date->format('Y-m-d H:i:s');
}
同じコードを持つイベントのコレクションを更新する必要があり、それらの更新を呼び出すと、有効な日付が取得されず、データベースに 0000-00-00 00:00:00 が入力されますが、検証はパスします。
public function putDate($code)
{
$models = Events::where('code','=',$code);
$rules = array(
'start' => 'required|date_format:d.m.Y H:i:s'
);
$validate = Validator::make(Input::all(), $rules);
if ($validate->fails())
{
return Redirect::action('AdminEventsController@getShow', $code)
->withErrors($validate->messages())
->withInput();
}
$models->update(array('start' => Input::get('start')));
setMsg('Saved!');
return Redirect::action('AdminEventsController@getShow', $code);
}
次のような実用的なソリューションを見つけました:
public function putDate($code)
{
$models = Events::where('code','=',$code)->get();
$rules = array(
'start' => 'required|date_format:d.m.Y H:i:s'
);
$validate = Validator::make(Input::all(), $rules);
if ($validate->fails())
{
return Redirect::action('AdminEventsController@getShow', $code)
->withErrors($validate->messages())
->withInput();
}
foreach ($models as $model)
{
$model->start = Input::get('start');
$model->save();
}
setMsg('Saved!');
return Redirect::action('AdminEventsController@getShow', $code);
}
ここで何が問題ですか?更新メソッドはミューテーターをスキップしていますか?