【问题标题】:whereraw Vs DB::raw in LaravelLaravel 中的 whereraw 与 DB::raw 对比
【发布时间】:2017-03-30 06:49:21
【问题描述】:

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

我阅读了两者的文档

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();

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

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

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

    但是如果你需要写一个完整的“原始where”,你应该使用whereRaw(为了你的方便)。例如:

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

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

    因此,在您的第一个示例中,它不起作用,因为您应该这样做:

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

    您的第二个示例可以通过使用whereRaw() 来简化,就像我回答中的上述声明一样​​。

    DB::raw() 也可用于->select()groupBy() 等。

    【讨论】:

    • 我还要补充一点, whereRaw 也可以接受参数数组作为第二个参数(就像 DB::raw()) 例如:->whereRaw("date > ?", [$date ])
    猜你喜欢
    • 2018-10-24
    • 2021-03-02
    • 2019-01-10
    • 1970-01-01
    • 2019-10-07
    • 2015-03-26
    • 2016-07-29
    • 2018-04-15
    • 2019-08-20
    相关资源
    最近更新 更多