我希望从日期大于给定日期的数据中获取记录.但是我在将日期与mongodb iso datetime进行比较时遇到了问题.
目前我正在以Y-m-d格式获取日期,我想在查询中比较并且mongodb中的日期是2015-10-08T08:01:46.000Z格式.
解决方法:
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对象,你可以试试
$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();
标签:php,mongodb,laravel-5 来源: https://codeday.me/bug/20190528/1168895.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。