我可以在Laravel5上获取pluck(列表)的自定义日期格式吗?

时间:2016-08-23 07:58:25

标签: php postgresql laravel-5.2

我的数据库记录是这样的。

tests table
id date
1 2016-07-01
2 2016-07-31
3 2016-08-01
4 2016-08-15
5 2016-08-31
6 2016-09-01

我想按月选择记录。 现在我的代码就是这个。

控制器

$months = \App\Test::where('date', '<=', 'now()')
                          ->orderBy('date', 'desc')
                          ->pluck('date', 'date');

查看

{{ Form::select('month', $months, old('month'), ['id' => 'month']) }}

( that generate this. )

<select id="month" name="month">
    <option value="2016-07-01">2016-07-01</option>
    <option value="2016-07-31">2016-07-31</option>
    <option value="2016-08-01">2016-08-01</option>
    <option value="2016-08-15">2016-08-15</option>
</select>

但我想要这个。

$months = \App\Test::where('date', '<=', 'now()')
                          ->orderBy('date', 'desc')
                          // ->format('m').
                          ->pluck('date', 'date');

{{ Form::select('month', $months, old('month'), ['id' => 'month']) }}

( I wanna generate this )

<select id="month" name="month">
    <option value="7">7</option>
    <option value="8">8</option>
</select>

我想用pluck格式,但不能这样做 有没有解决?

3 个答案:

答案 0 :(得分:2)

你可以通过三种方式做到这一点。 所有这些解决方案都取决于date属性不是Carbon实例的事实,这是你的情况。

  1. 日期属性的访问器,用于返回您希望的格式:
  2. 在您的测试模型中

    test.php的

    public function getDateAttribute($value)
    {
        return Carbon::createFromFormat('Y-m-d H', $value)->format('m');
    }
    

    然而,这会影响到处的代码。

    1. 第二种方法是创建自定义属性。
    2. public function getFormattedDateAttribute()
      {
          return Carbon::createFromFormat('Y-m-d H', $this->date)->format('m');
      }
      
      1. 第三种方法是编辑集合本身。
      2. $months = \App\Test::where('date', '<=', 'now()')
                                              ->orderBy('date', 'desc')
                                              ->pluck('date');
        
        $months->each(function($month){
                    return Carbon::createFromFormat('Y-m-d H', $month)->format('m');
                });
        

答案 1 :(得分:1)

$months = \App\Test::select(DB::raw('to_char(date, \'MM\')'))
                      ->where('date', '<=', 'now()')
                      ->orderBy('date', 'desc')
                      ->pluck('date', 'date');

这将为您提供月份列表。

更多info

答案 2 :(得分:0)

谢谢大家,我昨天放弃了从DB获得的月份, 但今天!!我得到了这个代码XD的正确答案。 注意,此代码仅适用于Postgresql, 哪里......现在()也是。这是postgres代码。 Mysql或sqlite必须更改DB raw和代码ya。

$months = \App\Test::select(\DB::raw('DATE_PART(\'MONTH\', date) AS MONTH'))
                        ->where('date', '<=', 'now()')
                        ->orderBy('date', 'desc')
                        ->pluck('month', 'month');