2015-10-08 1 views
3

Я хочу получить запись из данных, где дата больше заданной даты. Но мне приходится сталкиваться с проблемой сравнения даты с mongodb iso datetime.Как сравнить дату с mongodb iso date в laravel mongodb eloquent query?

В настоящее время я получаю дату в формате Y-m-d, который я хочу сравнить в запросе и дате в mongodb в формате 2015-10-08T08:01:46.000Z.

+0

Вы должны создать новую дату, используя новую дату Date ('Y-m-d'), а затем запросить его –

+0

@ Suresh-ISM вы можете уточнить. – Tuhin

+0

var date1 = новая дата («Y-m-d»); test.find ({created: {$ gt: new Date (date)}}) или test.find ({created: {$ gt: new Date ("Ymd")}}) –

ответ

5

Larvel's Eloquent поддерживает объекты Carbon/DateTime вместо объектов MongoDate, которые будут преобразованы изнутри в объекты MongoDate при сохранении в базе данных. Вы можете использовать этот пакет обработки даты в laravel под названием Carbon с вашими запросами.

Например, если вы хотите запросить записи из данных пользователей, где поле created_at даты и времени MongoDB является большим, что данная дата, скажем, записи с сегодняшнего дня, использовать Carbon в startOfDay() недвижимости:

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

Аналогично , чтобы сделать диапазон данных запроса, т.е. запрос для записей между определенным месяцем, скажем, октябрь 2015 года, используется метод 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(); 
+1

Спасибо @chridam Я смог сделайте это, используя объект MongoDate. – Tuhin

0

Самый простой способ для вы должны сравнить Carbon.

Например, если вы хотите получить от Y-м-д,

вы можете просто использовать это:

$dt = Carbon::createFromDate(2017,11,7); 

где 2017 = год, 11 = месяц, и 7 = день. Замените его в соответствии с нужной датой.

Если вы хотите получить данные, прежде чем текущее время, вы можете использовать

$dt = Carbon::now() 

И если вы хотите получить данные с 1-го числа текущего месяца вперед, вы будете просто сделать это:

$dt = Carbon::now()->startOfMonth(); 

Ниже приведен пример того, что я в моем коде:

$device_data = DB::connection('mongodb') 
->table('MyRecipe') 
->where('data_date', '>', $dt) 
->select('*') 
->get(); 

Я использую https://github.com/jenssegers/laravel-mongodb для доступа к моей базе данных Mongo.

Смежные вопросы