というフィールドがactivated_at
あり、Laravel の他のすべての日付と同じように扱いたいと考えています。データベースではタイムスタンプであり、 、 、など$dates
の一般的な日付とともに配列内に挿入しました。updated_at
created_at
deleted_at
これは、フォームや Web にまったく依存しない API システムの一部であるため、ビューから直接データを変換することはできません。
問題は、適切に設定して取得するために、2 つのミューテーター (ゲッターとセッター) をセットアップしたことです。
現在のセッター、それは最善の解決策ではありませんが、渡されたすべてのデータをデータベースに適したものに変換するセッターを作成する方法が正直にわかりません。私はMariaDBを使用しています
* Automatically parse the date from metric system to
* Imperial system because American DATABASES
*
* @param string $value
*/
public function setActivatedAtAttribute($value)
{
if(!$value instanceof \DateTime)
{
$value = Carbon::createFromFormat('d/m/Y H:i:s', $value)->toDateTimeString();
}
$this->attributes['activated_at'] = $value;
}
とにかく、このセッターは非常にうまく機能しています。私はたくさんの単体テストを書きましたが、それらは緑色です。
本当の問題はゲッターです。ゲッターは日付の Carbon インスタンスを返しますが、代わりに単に文字列を返します
/**
* Return the correct metric format of the date
*
* @param string $value
* @return string
*/
public function getActivatedAtAttribute($value)
{
// Because it's a string we cannot use Carbon methods
// Unless we instantiate a new Carbon object which it stupid
// Since the activated_at field is inside the $dates array
// Shouldn't we get the carbon object automatically?
return $value;
}
私の懸念は、getter メソッド内のコメント ブロックにあります。
そうは言っても、Laravel 5.1.xでミューテーターを使用してDateTimeを処理するためのより良い方法はありますか? 以来、すべての日付時刻を処理することを気にしません。すでにカーテンの後ろで処理されていますcreated_at
updated_at
deleted_at
TL;DR
Laravel 5.1.xでミューテーターを使用してDateTimeを処理するためのより良い方法はありますか? 以来、すべての日付時刻を処理することを気にしません。すでにカーテンの後ろで処理されています
created_at
updated_at
deleted_at