2016-04-05 11 views
2

私は今日の日付と有効期限を比較してオブジェクトのコレクションをフィルタリングしようとしていますが、動作することはありません。誰でもコードを見ることができます。私はここで何かを逃していると確信しています。私は全面的に検索し、多くの例を見つけましたが、誰も働いていません。日付を比較してビュー内のlaravelコレクションをフィルタリングしますか?

これはうまくいきますが、9つのオブジェクトのうち3つのオブジェクトのうち、有効期限が2012年に設定されているもののリストは、コレクションの結果を返しません。

コントローラ

public function classifieds() 
{ 
    $myclassifieds = Auth::user()->classifieds; 
    return view('account.classifieds')->with(['allclassifieds'=>$myclassifieds]); 
} 

ビュー

@if(count($allclassifieds->where('expired_on','<', Carbon\Carbon::now())) > 0) 
//Something here 
@endif 
+0

が言うのは難しい、正常に見えるカーボンのインスタンスを返します。 'expired_on'が各コレクションオブジェクトの最初のレベルで直接利用可能であることを確かめますか?また、 'where()'比較は厳密です。あなたの 'expired_on'は日付ですが、Carbon :: now()はあなたにdatetimeを与えます。それは問題を引き起こすかもしれません。確かではありません。 – lesssugar

+0

これは1つのオブジェクトを含むコレクションです。 Expires_onは日付時間オブジェクトは非常に奇妙です。 [ { "ID":31、 "ユーザ名": "テスト"、 "タイプ":1、 "アクション": "売り"、 "maincat": "アンティーク"、 "タイトル": "試験"、 "説明": "テスト"、 "extratextfield":ヌル、 "lowerprice":1、 "partex":0、 "条件": "使用"、 "価格": "680 "、 " images ":" 1 "、 " email ":" [email protected] "、 " comments ":1、 " created_at ":" 2016-04-03 19:00:26 "、 "updated_at": "2016-04-03 19:00:26"、 "expires_on ":" 2016-03-14 19:00:26 " } ] – matpulis

+0

あなたのコードには、' expired_on'があります。それは、元のコードの投稿や入力ミスでこれを入れている間、タイプミスですか? ;)オブジェクトは 'expires_on'を保持します。 – lesssugar

答えて

1

アクセス値expired_on直接

@foreach($allclassifieds as $classified) 
    @if($classified->expired_on > Carbon\Carbon::now()) 
     // show classified 
    @endif 
@endforeach 

あなたはexpired_onプロパティカルシウム行うことができますお使いのモデルに$dates配列に追加することで、デフォルトでインスタンスをrbon:

protected $dates = ['created_at', 'updated_at', 'expired_on']; 

expired_onは常にコレクション自体を見ることなく

+0

これは実際には動作しますが、私はCarbon :: parse()に$ classified-> expired_onを正常に比較する必要があります。私の探しているものではありませんが、このようにしてください。 – matpulis

+0

@matpulisは答えを更新しました。あなたはあなたが探しているものを詳述できますか? –

+0

コレクション内のアイテムのうち、expires_onの日付が今日よりも少ないアイテムの数を取得したいとします。 forループを実際に行う必要はありません。あなたの方法はうまくいきます。ありがとうございます – matpulis

関連する問題