Laravel - 雄辩复杂的where子句

时间:2014-05-21 15:14:06

标签: laravel eloquent

有人可以帮助我如何在下面完成这样的事情

->where("YEAR( date_field )", '>=', 2014)

date_field是一个mysql日期,如:2014-03-22

3 个答案:

答案 0 :(得分:2)

A raw() command should work

->whereRaw('YEAR(date_field) >= ?', array(2014))

答案 1 :(得分:1)

使用越少越好,Laravel使用Carbon作为其DateTime内部类,因此您可以:

$year = \Carbon\Carbon::createFromDate(2014)->firstOfYear();

它会返回这样的日期:

2014-01-01 00:00:00

因此,如果您按年份过滤并且需要从2014年开始的所有记录,则可以执行以下操作:

->where('date_field', '>=', $year)

不要忘记你可以创建辅助函数或方法:

public function year($year)
{
    return \Carbon\Carbon::createFromDate(2014)->firstOfYear();    
}

然后只是:

->where('date_field', '>=', year(2014))

答案 2 :(得分:1)

Raw当然是一个选项,但是从v4.1.25开始,你也可以使用以下方法:

->whereYear('column', '>=', 2014);

// and for month or day:
->whereMonth('column', '>=', 5);
->whereDay('column', '>=', 15);