2017-03-14 11 views
1

データベースにはタイムスタンプを格納するTime_1Time_2という2つの列があります。日付をフォーマットする2つの同一コードが機能しません

<div class="time">Time_1</div> 
<pre>{{ $order->order_date->format('Y/m/d g:i a')}} | {{ \Carbon\Carbon::createFromTimeStamp(strtotime($order->order_date))->diffForHumans() }}</pre> 
<div class="time">Time_2</div> 
<pre>{{ $order->payment_status_date->format('Y/m/d g:i a') }} | {{ \Carbon\Carbon::createFromTimeStamp(strtotime($order->payment_status_date))->diffForHumans() }}</pre> 

期待される結果:

は、ビュー上で、私はこれ持って

Time_1 = 2017/03/14 10:59 am | 1 hour ago 
Time_2 = 2017/03/14 10:59 am | 1 hour ago 

をしかし、それはそこにページの読み込みを停止しているように私は二度目に改ページを得ました。

エラー私には意味がないです。

Uncaught TypeError: Argument 1 passed to Illuminate\Exception\PlainDisplayer::display() must be an instance of Exception, instance of Error given,

var_dump($order->order_date) -> `object(Carbon\Carbon)#457 (3) { ["date"]=> string(26) "2017-03-14 10:59:37.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" }` 

var_dump($order->payment_status_date) -> `string(19) "2016-12-31 07:11:05"` 

疑問は、なぜ両方をタイムスタンプとして格納されているので、私は同じカーボンを使用してい...など私はしましたこの違いがあり、これを修正する方法は?

+1

これらは両方ともあなたのモデルの '$ dates'配列に定義されていますか? – EddyTheDove

+0

本当に面白いことではありませんが、与えられた 'error'は実際のエラー(' Exception \ PlainDisplayer')を表示したいプロセスから来ています。しかし、laravelには、 'Exception'が' Error'インスタンスとしてスローされるバグ/問題があるようです。実際のエラーは表示されません。 – JustOnUnderMillions

+0

あなたのlaravelログをチェックして何が起こるかを確認してください。 – Onix

答えて

1

モデルに$ dates配列の2番目の日付が追加されていることを確認してください。そうすれば、LaravelはCarbonインスタンスのように扱うことができます。

protected $dates = ['Time_1', 'Time_2']; 
+0

これは問題を修正した。私はLaravelがモデルでそれらを指定する必要がある理由を理解していません。私はこれを理解しているので、Carbonは配列内のデータ全体を取り、配列は指定されたIDの行全体にする必要がありますか? – VLS

+0

Laravelはこれらのデータベース列をCarbonインスタンスに自動的に変換するため、これらの形式メソッドを使用できます。デフォルトでは、created_atおよびupdated_atフィールドについてのみ知っています。だからあなたがもっと持っているなら、あなたはそれを日付として見るように言わなければなりません。 –

+0

ありがとうございます。それは私には奇妙なのですが、なぜこのように働いているのですか?また、Laravelに与えたすべての日付の列を明示的に指定しなくても – VLS

関連する問題