laravel mongodb eloquent查询中将日期与mongodb iso日期进行比较

我希望从日期大于给定日期的数据中获取记录.但是我在将日期与mongodb iso datetime进行比较时遇到了问题.

目前我正在以Y-m-d格式获取日期,我想在查询中比较并且mongodb中的日期是2015-10-08T08:01:46.0​​00Z格式.

解决方法:

Laravel的Eloquent支持Carbon / DateTime对象而不是MongoDate对象,当保存到数据库时,它们将在内部转换为MongoDate对象.您可以在您的查询中使用名为Carbon的laravel中的此日期处理包.

例如,如果要查询来自用户数据的记录,其中mongodb datetime字段created_at大于给定日期(例如今天的记录),请使用Carbon的startOfDay()属性:

$dt = Carbon::now()->startOfDay();
$users = User::where('created_at', '>', $dt)->get();

同样,要进行数据范围查询,即查询特定月份之间的记录,例如2015年10月,请使用whereBetween方法:

$users = User::whereBetween(
             'created_at', array(
                 Carbon::createFromDate(2015, 10, 1),
                 Carbon::createFromDate(2015, 10, 31)
             )
         )->get();

另一种方法是使用Eloquent,它允许您使用Carbon / DateTime对象而不是MongoDate对象.示例灵感来自docs

<?php

use Jenssegers\Mongodb\Model as Eloquent;

class User extends Eloquent {

    use SoftDeletingTrait;

    /**
     * Collection for Model
     *
     * @var String
     */
    protected $collection = "users";

    /**
     * Connection for model
     *
     * @var type
     */
    protected $connection = 'mongodb';

    protected $dates = array('created_at');
}

这允许您执行以下查询:

目前我是使用这种方式解决问题的

$users = User::where('created_at', '>', new DateTime('-1 day'))->get();

或者本机使用MongoDate对象,你可以试试

下面这种方式mongodb扩展新版本新用方法不同,参阅:https://stackoverflow.com/questions/34667609/fatal-error-class-mongodate-not-found-when-using-mongodb-php-driver-1-1-2-and

$start = new MongoDate(strtotime("2015-10-01 00:00:00"));
$stop = new MongoDate(strtotime("2015-10-31 00:00:00"));

$users = DB::collection('users')->whereBetween('created_at', array($start, $stop))->get();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值