php 我可以在Laravel5上为pluck(列表)设置自定义日期格式吗?

8yoxcaq7  于 2022-12-10  发布在  PHP
关注(0)|答案(4)|浏览(93)

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

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>

我想使用格式与勇气,但不能这样做可悲的任何解决办法?

dw1jzc5e

dw1jzc5e1#

你可以通过三种方法来实现这一点。所有这些解决方案都依赖于日期属性不是Carbon示例这一事实,而这正是你的情况。

  1. date属性的存取子,以传回您想要的格式:
    在测试模型中
    测试. php
public function getDateAttribute($value)
{
    return Carbon::createFromFormat('Y-m-d H', $value)->format('m');
}

但是,这将影响所有地方的代码。
1.第二种方法,是创建自定义属性。

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

1.第三种方法是编辑集合本身。

$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');
        });
slhcrj9b

slhcrj9b2#

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

这将生成一个月份列表。
更多info

wnvonmuf

wnvonmuf3#

谢谢大家,我已经放弃了从DB昨天皮卡月,但今天!!我得到了这个代码XD的真实答案。注意,这段代码将工作Postgresql只,和在哪里...现在()是太。这是postgres代码。Mysql或sqlite必须改变数据库原始和在哪里代码雅。

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

woobm2wo4#

您可以像这样同时摘下和取出碳年代测定仪:

->pluck('date.month');

获取器来源https://carbon.nesbot.com/docs/#api-getters

相关问题