2017-01-05 8 views
1

私のNewsItemテーブルに、指定された月/年で書かれた記事を検索しようとしています。Laravel Eloquent Where Created at

私は、次の変数をキャッチし、私のモーダル

if(Input::get('month')){ 
    $articles = NewsItem::where(DB::raw('created_at'),function($d){ 
     Carbon::parse($d->created_at)->format('F Y') = Input::get('month'); 
    })->get(); 
}; 

上でクエリを実行しようとしている。しかし、私は取得しています私のコントローラでGET変数

'/news?filter=true&month=January 2017' 

URLを渡していますエラー

NewsController.php行のFatalErrorException 28:メソッドを使用できません 書き込みコンに戻り値テキスト

雄弁の中の機能要素について詳しく知りたいのですが、正しい方向に私を導く記事がありますか?

+0

私はnews_itemsテーブルのcreated_atフィールドがdatetimeフィールドであると仮定しますか? – Robert

答えて

0

を参照してください。この

if (Input::get('month')) { 
    $articles = NewsItem::where('created_at', Carbon::parse(Input::get('month'))->format('F Y'))->get(); 
}; 

のように変更する必要があります。

その月のすべての記事が必要な場合は、いくつかの素敵なCarbonヘルパーと組み合わせて使用​​できます。この場合、クロージャを使用する必要はありません。

例:だからここに、ここで必要とされていないクロージャを使用して

// Garble or empty inputs will throw an Exception in Carbon 
try { 
    // this will create a Carbon object or Carbon will throw an exception 
    $date = Carbon::parse(request()->input('month')); 

    $articles = NewsItem::whereBetween('created_at', [ 
      $date->startOfMonth()->toDateTimeString(), 
      $date->endOfMonth()->toDateTimeString(), 
    ])->get(); 

} catch(\Exception $e) { 
    // gracefully handle Exception 
    dd($e->getMessage()); 
} 

あなたがそれらを使用する方法の例を見たい場合は、閉鎖にLaravel query parameter grouping


いくつかの追加の例を参照してください。代わりの間で使用するのでは、あなたの場合は

を、あなたは可能性があり、グループ2

// Garble or empty inputs will throw an Exception in Carbon 
try { 
    // this will create a Carbon object or Carbon will throw an exception 
    $date = Carbon::parse(request()->input('month')); 

    $articles = NewsItem::where('created_at', function($query) use($date) { 
     $query 
      ->where('created_at', '>=', $date->startOfMonth()->toDateTimeString()) 
      ->where('created_at', '<=', $date->endOfMonth()->toDateTimeString()); 
    })->get(); 

} catch(\Exception $e) { 
    // gracefully handle Exception 
    dd($e->getMessage()); 
}