2017-10-17 63 views
1

我有,我想覈對在Laravel星火結束審判日的數組:Laravel雄辯 - 其中created_at是在X天前

$trialIntervals = [10, 5, 3, 1, 0]; 

我取所有的球隊,然後檢查他們的trial_ends_at日起使用間隔diffInDays:

$daysTillTrialEnds = Carbon::parse($team->trial_ends_at)->diffInDays(Carbon::now()); 

然後我檢查,如果這個值已經是現有結果的數據庫和間隔:

if (in_array($daysTillTrialEnds, $trialIntervals) && !TrialEndingNotification::where('team_id', $team->id)->where('days_notified_at', $daysTillTrialEnds)->count()) { 

    // not yet been added to db 

} 

我有一個名爲'days_notified_at'的字段,如果我已經添加了行並通知了客戶,我正在使用該檢查。但是,該字段不會再次使用,我寧願引用created_at日期並刪除該字段。

我的問題是如何基本上做到這一點:

->where(Carbon::parse('created_at')->diffInDays(Carbon::now()), $daysTillTrialEnds) 

沒有收到此錯誤:

DateTime::__construct(): Failed to parse time string (created_at) at position 0 (c): The timezone could not be found in the database 

的目的是,在那裏將只顯示有一個是X一個created_at日期行幾天前。

+0

工作,也許是因爲在那裏功能「 - >其中()」的第一個參數是字段名,所以碳::解析爲在還沒有感覺到 – LorenzoBerti

+1

Laravel第一參數有一個'whereDate()'函數,在這種情況下可能會幫助你很多。 –

回答

0

你有沒有嘗試過這樣的:

$dayAgo = 6 // where here there is your calculation for now How many days 
$dayToCheck = Carbon::now()->subDays($dayAgo); 
$model->where("created_at", =, $dayToCheck); 
0

使用WhereRaw

->whereRaw('DATEDIFF(CURDATE(),STR_TO_DATE(created_at, '%Y-%m-%d'))'), $daysTillTrialEnds) 
0
->where(Carbon::parse('created_at')->diffInDays(Carbon::now()), $daysTillTrialEnds) 

到應該像

->where(Carbon::parse($item->created_at)->diffInDays(Carbon::now()), $daysTillTrialEnds) 
0

Laravel會自動打開 「created_at」 成碳對象,所以你沒有解析它。

`$items->where('created_at')->diffInDays(Carbon::now(), $daysTillTrialEnds)' 

應該爲你