2017-04-12 30 views
4

我想要選擇的是在用戶指定的日期時間等之間的文件,證件:我使用laravel框架和jenssegersMongoDB的原始查詢並選擇其中給出的日期時間週期

$from_date : "2017-01-07 09:08:59" To `$to_date : "2017-08-09 09:08:59"` 

/laravel-的MongoDB mongodb驅動程序來運行我的查詢,這是我的原始查詢:

$normal_banners = BannerView::raw(function ($collection) use ($id, $from_date, $to_date) { 
     $conditions = [ 
     ["camp_id" => ['$eq' => $id]], 
     ['$or' => [ 
       ['seat_target_status' => ['$eq' => true]], 
       ['seat_target_status' => ['$eq' => false]] 
     ]], 
     ['camp_target_status' => ['$eq' => false]], 
     ]; 

     if ($from_date) { 
      $conditions[] = ['created_at' => ['$gte' => $from_date]]; 
     } 

     return $collection->aggregate([ 
      ['$match' => ['$and' => $conditions]], 
     ]); 
    })->count(); 

但我的問題是,它返回0作爲結果;而在這段時間內有16個文件。

我已經試過這種方法來獲得他們的計數,但仍爲0的結果:

$normal_banners = BannerView::Where('camp_id', $id) 
     ->where(function ($query) {$query->where('seat_target_status', true)->orWhere('seat_target_status', false); 
      }) 
     ->where('camp_target_status', false) 
     ->where("created_at", ">=", $from_date) 
     ->count(); 

FYI:我已經輸入到ISODate這是created_at場MongoDB的數據類型的轉換日期時間。

$Fromdatetime = $request->input('from_date'); 
$from_date = new DateTime($Fromdatetime); 
$from_date = $from_date->format(DateTime::ISO8601); 

mongodb的字段數據類型爲:

"updated_at": ISODate("2017-04-10T09:35:58.641Z"), 
    "created_at": ISODate("2017-04-10T09:35:58.641Z") 

我的輸入數據的類型是:"2017-01-07T09:08:59+0000"

任何建議?

回答

4

我已經解決

輸入:

{ 
    "from_date": "2017-03-10", 
    "to_date": "2017-04-09" 
} 

轉換輸入日期:使用碳:: createDateFrom方法這個問題,它在我的輸入創建一個UTC日期時基

$from_date_arr = explode("-",$request->input('from_date')); 
$from_date = Carbon::createFromDate($from_date_arr[0],$from_date_arr[1],$from_date_arr[2]); 

$to_date_arr = explode("-",$request->input('to_date')); 
$to_date = Carbon::createFromDate($to_date_arr[0],$to_date_arr[1],$to_date_arr[2]); 

,這是我運行查詢其工作:

$normal_banners = BannerView::Where('camp_id', $id) 
    ->where(function ($query) {$query->where('seat_target_status', true)->orWhere('seat_target_status', false); 
     }) 
    ->where('camp_target_status', false) 
    ->where("created_at", ">=",$from_date) 
    ->where("created_at", "<=",$to_date) 
    ->count(); 

沒有與jessenger司機一個奇怪的問題還是其whereBetween不能正常工作,我們應該使用兩個where子句,使其工作。

希望解決別人的問題。

4

你要「把在大括號」 orWhere功能,在您正在測試用的updated_at列$ TO_DATE您的原始查詢,但在雄辯的代碼你之間有created_at列使

$targeted_banners = BannerView::Where('camp_id', $id) 
    ->where(function($query){$query->where('seat_target_status', true)->orWhere('seat_target_status', false);}) 
    ->where('camp_target_status', false) 
    ->where("created_at", ">=" $from_date) 
    ->where("updated_at", "<=", $to_date) 
    ->count(); 
+0

created_at和update_at之間沒有區別但是你是對的我應該檢查一個字段的日期時間檢查,讓我試試你的方法。 –

+0

@Autisa_z我試過你的方法 - 或聲明部分工作,並感謝它,但日期檢查仍然無法正常工作,我得到0結果。 –

+0

@Mohammad_Hosseini以及created_at/uploated_at列的格式是什麼? –

相關問題