26

mysql データベースにタイムスタンプ変数列があります。Carbon タイムスタンプをそこに入力できるものに変換しようとしましたがCarbon::now()、Carbon オブジェクトのみが返され、Carbon オブジェクトのタイムスタンプ文字列を使用しようとすると、mysql に登録されません。

public function store(CreateArticleRequest $request){
        $input = $request->all(); 
        var_dump($input); // JUST SO YOU CAN SEE
        $input['published_at'] = Carbon::now(); 
        var_dump($input); // JUST SO YOU CAN SEE
        Article::create($input);   
}

私の最初の var ダンプは次のようになります。

array (size=4)
  '_token' => string 'Wy67a4hWxrnfiGz61wmXfYCSjAdldv26wOJiLWNc' (length=40)
  'title' => string 'ASDFasdf' (length=8)
  'body' => string 'asdfasdf' (length=8)
  'published_at' => string '2015-08-26' (length=10)  

私の2番目のvarダンプはそうです。

「published_at」に関連する mysql 列は、タイムスタンプ変数です。これをカーボンオブジェクトからどのように変換すると思いますか?

前もって感謝します。

4

3 に答える 3

12

問題は日付文字列にあります。たとえば、次のようになります。

public function setCrbDateAttribute($value)
{
     $this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}

現在、10-12-2014 のような日付がある場合、時と分が欠落しているため、このエラーが発生します。したがって、日付にすべてのパーが含まれていることを確認し、日付文字列に / ではなくセパレータとして - が含まれていることも確認してください。

つまり、Carbon を使用する前に $value を確認し、メソッドで使用したのとまったく同じ書式設定された文字列が日付文字列に含まれていることを確認してください。

これはアクセサー メソッドでも発生するため、使用する前にまず日付値を確認してください。Carbon::createFromFormat().

ユーザー入力から日付を取得している場合は、date または date_format:format ルールを使用して使用する前に日付を検証し、ここで検証を確認してください。

回答参照:

Laravel/Carbon タイムスタンプ 0000-00-00 00:00:00 または予期しないデータが見つかりました。予期しないデータが見つかりました。データがありません

于 2015-08-26T07:44:56.350 に答える
-26

モデルに Mutator を設定することもできます。

public function setPublishedAt($value)
{
    $this->attributes['published_at'] = strtotime($value);
}

タイムスタンプに変換する

$model -> setPublishedAt('2015-08-26'); // 1440572400

または、日付をタイムスタンプに変換するだけですstrtotime

strtotime — 英語のテキストによる日時記述を Unix タイムスタンプに解析する

この助けを願っています。

于 2015-08-26T07:50:39.367 に答える