在Laravel中,whereraw与DB :: raw

时间:2017-03-30 06:49:21

标签: php laravel laravel-5

我很困惑,真的不知道我应该如何以及在哪里选择使用两者?

我阅读了两个文档

https://laravel.com/docs/5.4/queries#where-clauses

并且

https://laravel.com/docs/5.4/queries#raw-expressions

如果我使用像这样的查询它不起作用

DB::table('table_name')
->where('parent_id', $parent_id)
->whereRaw("date",">",$date)
->get();

但它有效

DB::table('table_name')
->where('parent_id', $parent_id)
->where(DB::raw("date",">",$date))
->get();

1 个答案:

答案 0 :(得分:5)

DB::raw()允许您将原始语句作为查询的一部分编写。例如:

->where(DB::raw('DATE(date_column)'), '>', '2017-01-01')

但如果您需要编写完整的“raw where ”,则应使用whereRaw(为方便起见)。例如:

->whereRaw('DATE(date_column) > DATE(another_date_column)')

此外,whereRaw()接受完整的where子句。

所以,在你的第一个例子中,它不起作用,因为你应该这样做:

->whereRaw("date > ".$date)

在我的回答中,只需使用whereRaw()就像上面的陈述一样,可以简化你的第二个例子。

同样DB::raw()可以在->select()groupBy()和其他人中使用。