Laravel 的 Eloquent 支持 Carbon/DateTime 对象而不是 MongoDate 对象,这些对象在保存到数据库时会在内部转换为 MongoDate 对象。您可以在 laravel 中使用名为 Carbon 的日期处理包来处理您的查询。
例如,如果您想从用户数据中查询记录,其中 mongodb 日期时间字段 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 对象,你可以试试
$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();