[英]How to compare date with mongodb iso date in laravel mongodb eloquent query?
我希望從日期大於給定日期的數據中獲取記錄。 但是我在將日期與mongodb
iso datetime進行比較時遇到了問題。
目前我以Ymd格式獲取日期,我想在查詢中比較, mongodb
中的日期是2015-10-08T08:01:46.000Z
格式。
Laravel的Eloquent支持Carbon / DateTime對象而不是MongoDate對象,當保存到數據庫時,它們將在內部轉換為MongoDate對象。 您可以在您的查詢中使用名為Carbon的 laravel中的此日期處理包。
例如,如果要查詢來自Users數據的記錄,其中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對象。 來自文檔的示例:
<?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();
比較日期的最簡單方法是使用Carbon 。
例如,如果你想從Ymd獲得,
你可以用這個:
$dt = Carbon::createFromDate(2017,11,7);
其中2017年=年,11 =月,7 =日。 根據您所需的日期更換它。
如果您想在當前時間之前獲取數據,可以使用
$dt = Carbon::now()
如果您想從當月的第一天開始獲取數據,您只需執行以下操作:
$dt = Carbon::now()->startOfMonth();
下面是我在代碼中使用的示例:
$device_data = DB::connection('mongodb')
->table('MyRecipe')
->where('data_date', '>', $dt)
->select('*')
->get();
我正在使用https://github.com/jenssegers/laravel-mongodb來訪問我的Mongo數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.