Laravel 4 雄辩的查询

Posted

技术标签:

【中文标题】Laravel 4 雄辩的查询【英文标题】:Laravel 4 Eloquent Query 【发布时间】:2014-06-09 22:13:46 【问题描述】:

我正在尝试按今天的日期查询“created_at”字段:

$today = DATE('Y-m-d');
$logs = DB::table('bglogs')->where('DATE('created_at')','=',$today)->where('user_id','=',Auth::user()->id)->get();

它告诉我 DATE('created_at') 是未知列?任何建议,对于 Eloquent 来说都是相对较新的,所以我确信我错过了一些明显的东西。

提前致谢!

编辑:2014 年 6 月 10 日

想要说明的是,我必须对其进行一些调整,因为它要带回所有记录而不是特定日期。不知道为什么。我终于让这个工作正常了。再次感谢所有回答的人,我希望此更新将在未来对其他人有所帮助:

$logs = DB::select(DB::raw("SELECT * FROM bglogs WHERE DATE(created_at) = :today AND user_id = :user"), array('today'=>DATE('Y-m-d'), 'user'=>Auth::user()->id));

【问题讨论】:

试试这个 $today = DATE('Y-m-d'); $logs = DB::table('bglogs')->where('created_at','=',$today)->where('user_id','=',Auth::user()->id)- >get(); created_at 列不需要指定DATE函数 Laravel ORM, date compare的可能重复 这就是我的想法,但它没有从数据库中带回任何结果,而且我的记录应该符合该标准。 【参考方案1】:

如果你想使用 mysql 函数,你必须使用 whereRaw 并将它写在一个字符串中。

在另一个地方,你可以跳过第二个参数,如果它等于(=)。

$today = DATE('Y-m-d');
$logs = DB::table('bglogs')
    ->select(DB::raw('*'))
    ->whereRaw("DATE('created_at') = " . $today)
    ->where('user_id', Auth::user()->id)
    ->get();

希望对你有所帮助。

如果你只使用 var 一次,我建议你不要声明别名:

$logs = DB::table('bglogs')
    ->select(DB::raw('*'))
    ->whereRaw("DATE('created_at') = " . DATE('Y-m-d'))
    ->where('user_id', Auth::user()->id)
    ->get();

【讨论】:

这行得通,但我不得不调整它。希望你能读到: $logs = DB::table('bglogs') ->select(DB::raw('*')) ->where(DB::raw("DATE('created_at')", '=', $today)) ->where('user_id','=',Auth::user()->id) ->get();再次感谢您,非常感谢。【参考方案2】:

您可以试试这个(Carbon 可用于Laravel):

$today = Carbon\Carbon::toDay()->toDateTimeString();
$logs = DB::table('bglogs')->where('created_at', $today)
                           ->where('user_id', Auth::user()->id)
                           ->get();

【讨论】:

不错!感谢您的提醒。我更喜欢这样。 我还假设您的 created_at 字段是在迁移期间使用 timestamps() 方法创建的。【参考方案3】:

只要定义搜索条件,就不需要使用 raw 方法。 试试这个:

$today = DATE('Y-m-d');
$logs = DB::table('bglogs')
            ->where('created_at', '=>', $today.' 00:00:00')
            ->where('created_at', '<=', $today.' 23:59:59')
            ->where('user_id', '=', Auth::user()->id)
            ->get();

如果问题仍然存在,请检查您的表是否存在此 created_at 字段。

【讨论】:

【参考方案4】:
$today=date("Y-m-d");
$coustomers=Coustomer::where('created_at','like',"$today%")->get();

【讨论】:

【参考方案5】:

你可以使用 laravel 提供的Carbon 类:

$today = Carbon::today();

$logs = DB::table('bglogs')
            ->where('created_at','>=',$today)
            ->where('user_id','=',Auth::user()->id)
            ->get();

或者

您可以使用 php date 函数手动执行此操作:

$today = new \DateTime(date('F jS Y h:i:s A', strtotime('today')));

$logs = DB::table('bglogs')
            ->where('created_at','>=',$today)
            ->where('user_id','=',Auth::user()->id)
            ->get();

【讨论】:

以上是关于Laravel 4 雄辩的查询的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4,雄辩 - 语句和运算符之间

laravel 4 - 如何限制(采取和跳过)雄辩的 ORM?

Laravel 雄辩的极限查询

laravel 雄辩的关系查询

带有雄辩查询的 Laravel 分页

Laravel:自我 JOIN 的雄辩查询