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 雄辩的查询的主要内容,如果未能解决你的问题,请参考以下文章