MONGODB和LARAVEL 5.1。我今天需要更新所有文件,我该怎么做?

时间:2015-11-24 15:48:51

标签: mongodb laravel-5.1

我需要获取所有文件,其中up​​dated_at与今天或昨天的日期相同, 我怎么能这样做?

这是我目前的代码:

$yesterday = new DateTime('-1 days');
$yesterday = $fecha->format('Y-m-d');
$yesterday = new MongoDate(strtotime($yesterday.'00:00:00'));

$date=CampaignLog::where('campaign_id',$id)->where('updated_at','=', $yesterday)->get(array('data'));

1 个答案:

答案 0 :(得分:0)

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

例如,如果您要查询来自CampaignLog数据的记录,其中mongodb日期时间字段updated_at大于给定日期,例如昨天的记录,请使用Carbon的 {{3帮助方法:

$dt = Carbon::yesterday();
$campaigns = CampaignLog::where('updated_at', '>=', $dt)->get();

同样,要进行数据范围查询,即查询现在和昨天之间的记录,请使用 whereBetween 方法:

$campaigns = CampaignLog::whereBetween(
             'updated_at', array(
                 Carbon::yesterday(),
                 Carbon::now()
             )
         )->get();

另一种方法是使用 yesterday() ,它允许您使用Carbon / DateTime对象而不是MongoDate对象。示例受到 Eloquent

的启发
<?php

use Jenssegers\Mongodb\Model as Eloquent;

class CampaignLog extends Eloquent {

    use SoftDeletingTrait;

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

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

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

允许您执行以下查询:

$campaigns = CampaignLog::where('updated_at', '>=', new DateTime('-1 day'))->get();

或者原生使用MongoDate对象,您可以尝试

$start = new MongoDate(strtotime("yesterday"));
$stop = new MongoDate();

$campaigns = DB::collection('campaignlog')->whereBetween('updated_at', array($start, $stop))->get();