Laravel Eloquent独特的时间戳的一年

时间:2017-10-30 13:42:27

标签: mysql laravel-5 eloquent

在某些索引上,我有选择过滤结果的选择框,其中1个按年过滤。但是这个选择框只需要相关表格中的年份。在网上做了一些研究之后我想出了这个:

public function getAvailableYears(string $column)
{
    $years = $this->model->selectRaw("substr({$column},1,4) as year")
                         ->distinct('year')
                         ->pluck('year', 'year')
                         ->toArray();

    return ['' => 'All'] + $years;
}

这完美地生成了一个可以插入到Form :: select()

中的数组

我想知道是否有更好的方法来做到这一点。它似乎工作正常,因为时间戳总是以年份开始,但我不确定将来可能遇到的性能或其他问题。任何专家见解都会很棒。

2 个答案:

答案 0 :(得分:0)

我还试图为报表模块创建年份下拉列表,并希望从数据库表中获得唯一年份,尤其是“ created_at”字段。经过大量的尝试和修改后,提出了这个建议。结果已经是数组,无需转换。

尝试一下:

$result = App\ModelName::select(DB::raw('YEAR(created_at) as year'))->distinct()->get();
$years = $result->pluck('year');

答案 1 :(得分:0)

我将这种方法用于与日期列不同的年份。

tableModel::whereNotNull('columnName')->distinct()->get([DB::raw('YEAR(columnName) as year')]);