Laravel:从时间戳读取可用的月份和年份以填充<select>

时间:2017-01-01 19:13:27

标签: php laravel php-carbon

我有一个电影表,其中有一个时间戳列CREATED_AT。格式是: name created_at Pocahontas 2016-12-28 22:09:24 我知道如何从当前月份添加的表中选择电影     $ year_month_film = DB :: table('films')          - &GT;选择( '*膜。')          - &gt; whereMonth('films.created_at','=',Carbon :: now() - &gt; month)          - &gt; orderBy('films.created_at','desc')          - &GT;得到(); 但现在我想让用户动态选择任何一年中任何一个月添加的电影列表(见图): 我在HTML视图中构建了两个,以便动态选择任何一年中任何一个月添加的电影。 &lt; div class =“pull-right”&gt;             &LT;选择&GT;               &lt; option value =“all”selected&gt; Months&lt; / option&gt;               &lt; option value =“January”&gt; January&lt; / option&gt;               &lt; option value =“February”&gt; February&lt; / option&gt;               &lt; option value =“March”&gt; March&lt; / option&gt;               ...             &LT; /选择&GT;             &LT;选择&GT;               &lt; option value =“all”selected&gt; Years&lt; / option&gt;               &lt; option value =“2011”&gt; 2011&lt; / option&gt;               &lt; option value =“2014”&gt; 2014&lt; / option&gt;               &lt; option value =“2016”&gt; 2016&lt; / option&gt;               ...             &LT; /选择&GT;         &LT; / DIV&GT; 问题是: 我没有每个月和每年都添加电影,因此我需要通过阅读“created_at”列来了解数据库中存在哪些月份和哪些年份(彼此独立)。然后传递给视图。但我不知道如何使用Carbon做到这一点。 我如何获取所选的月份和年份,然后传递给控制器​​并进行动态搜索,而不是我在开始时发布的当前月份? 编辑: 只是为了更新可能有用的人: 我已经删除了重复的月份,在Yohanan Baruchel分配的代码中添加了一行,代码现在看起来像这样: $ available_years_with_months = [];         $ all_year_and_months = DB :: table('films')             - &GT;选择( '*')             - &gt; orderBy('films.created_at','desc')             - &gt; get() - &gt;每个(函数($ film)使用(&amp; $ available_years_with_months){              $ date = Carbon :: parse($ film-&gt; created_at);              $ year = $ date-&gt;格式('Y');              $ month = $ date-&gt;格式('F');              $ available_years_with_months [$ year] [] = $ month;             $ available_years_with_months [$ year] = array_unique($ available_years_with_months [$ year]);            });

2 个答案:

答案 0 :(得分:1)

如果您只想获得实际拥有电影的月份列表,您可以使用我为您编写的下一行:

$available_years_with_months = [];

$all_year_and_months = DB::table('films')
       ->select('*')
       ->get()->each(function($film) use (&$available_years_with_months) {
         $date = Carbon::parse($film->created_at);
         $year = $date->format('Y');
         $month = $date->format('F');
         $available_years_with_months[$year][] = $month;
       });

答案 1 :(得分:0)

Springtf的变更编号范围是两个。

$year_month_film = DB::table('films')
    ->select('*')
    ->whereMonth('created_at', '=', sprintf("%02d",Carbon::now()->month))
    ->orderBy('films', 'desc')
    ->get();