2016-11-29 7 views
3

は、私は次の形式で日付ピッカーで選択されているの日付を持っているLaravelはデータベースに保存する前に日付を変更しますか?

​​ だから、AM/PMを使用して、それが正しい私の入力欄に以下を示し

enter image description here

オフラインでフォームを送信すると、Laravelはレコードを更新しません。これは、形式がmysqlのDATETIMEフィールドで不明であるためです。それは私が次のように私のモデルのミューテーターを使用してみました

Laravelによって解析される必要がありますので

私の「日付」フィールドは、成功せず、$日付配列に追加され

public function setDateAttribute($value) 
{ 
    $this->attributes['date'] = Carbon::createFromFormat('Y-m-d g:i A', $value)->format('Y-m-d H:i:s'); 
} 

元の値は更新されていません。 私は何が間違っているかもしれませんか?

+0

フォームを送信すると、annyエラーが発生しますか? –

+0

それだけで私のデータベースの値を更新しません – Notflip

答えて

1

Laravelの日付ミューテータは'Y-m-d H:i:s'のような形式を想定していますが、別の形式を指定するためにあなたのモデルに$dateFormat属性を使用することができます。例:$datesに記載されている属性もカーボンを受け入れるため

protected $dateFormat = 'Y-m-d g:i A'; 

Date Mutators

下のドキュメントで日付書式セクションをご覧くださいまた、あなたは、モデルの外にカーボンを使用して日付を解析することができます例:

$model->date = Carbon::createFromFormat('Y-m-d g:i A', '2016-11-29 02:00 PM'); 

これは通常私が使用しているアプローチです。私にとっては、これはユーザフレンドリーなフォーマットをモデル/ DBが予想するものにマップしようとするフロントエンドの関心事のように感じるので、通常はこのロジックをコントローラに入れます。

+0

ありがとうございました!私はこのすべてと混乱していました。デフォルトでデータベースに保存するのは間違いありませんが、そうでない場合は表示してからコントローラで再変換してください。 – Notflip

2

はLaravelのdate mutatorsを見ていただきありがとうございます、これはアクセスを処理し、それがcreated_atおよびその他のデフォルトの日付でない同じように、あなたのためのデータベースの出入りの日付を変異します。

基本的に、あなたがそうのようなモデルの$dates配列にdateフィールドを追加する必要があります。

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    /** 
    * The attributes that should be mutated to dates. 
    * 
    * @var array 
    */ 
    protected $dates = [ 
     'created_at', // Add if you're using timestamps on the model 
     'updated_at', // Add if you're using timestamps on the model 
     'deleted_at', // Add if you're using softDeletes on the model 
     'date' 
    ]; 
} 

とき、それに対しモデルは、それはDATETIMEように行うのデータベースに永続化される。この方法あなたのモデルにデータベースから読み取られている場合、Carbonインスタンス

+0

あなたの答えをありがとう、これはすでにケースです。私はそれを私の質問に追加するのを忘れました。今すぐ追加します。 – Notflip

1

あなたの炭素機能はOKと思われます。しかし、なぜそれが動作しない、理解していない。しかし、私はPHPの日付関数を使用してソリューションを持っています。

public function setDateAttribute($value) 
{ 
    $this->attributes['date'] = date("Y-m-d H:i:s", strtotime($value); 
} 
関連する問題