一行过滤位置,并用Orderby排序

时间:2019-03-14 10:43:18

标签: laravel eloquent

我想传递一个数组,其中包含所有学徒,并按专业化,开始年份和姓名排序。

$apprentices = Apprentice::orderBy('specialization', 'asc')->orderBy('startYear', 'asc')->orderBy('name', 'asc')->get();

这工作得很好,但是现在我只想返回4年前或更短的学徒期的数据集。 我试过这个:

        $apprentices = Apprentice::orderBy('specialization', 'asc')->orderBy('startYear', 'asc')->orderBy('name', 'asc')->get()->where('startYear' <= date("Y") - 4);

但这不会返回任何内容。

这只是一个较小的语法错误,还是我的想法是错误的? 预先感谢

2 个答案:

答案 0 :(得分:0)

您尝试过吗:

$apprentices = Apprentice::whereYear('startYear', '<=', \Carbon\Carbon::now()->subYears(4))->orderBy('specialization', 'asc')->orderBy('startYear', 'asc')->orderBy('name', 'asc')->get();

答案 1 :(得分:0)

您的where子句的格式不正确,您需要将get移到末尾:

$apprentices = Apprentice::orderBy('specialization', 'asc')->orderBy('startYear', 'asc')->orderBy('name', 'asc')->where('startYear', '<=', date("Y") - 4)->get();

请参阅手册where clauses