[英]How to iterate over elements in batch using for loop in php using crontab
我想在Laravel應用程序中迭代1000多個數據庫記錄,以獲取每個單獨記錄的Google Analytics(分析)數據。 與Google Analytics(分析)API的連接大約在1小時后關閉,因此我無法使用foreach循環一次遍歷所有這1000條記錄。 我可以一次遍歷大約350條記錄,例如在這1小時內。
我想使用調度程序(例如nginx crontab)運行PHP代碼。 我想知道如何在調度程序的特定時間首先處理350條記錄,然后在調度程序的另一個時間范圍內處理接下來的350條記錄,依此類推。
實現此目的的一種方法是使用三個單獨的文件,它們將包含用於處理不同記錄和在不同crontab時間范圍內調度單個文件的相同邏輯。
但是,我沒有創建3個單獨的文件,而是希望使用單個文件使用Crontab在不同的時間范圍內處理所有1000條記錄。 有什么辦法可以做到這一點?
以下是我的代碼段:
$models = DB::table('gatestmodels')
->join('carmodels', 'gatestmodels.ID', '=', 'carmodels.ID' )
->select('gatestmodels.ID', 'gatestmodels.MaskingName')
->where('CarMakeId', $make->ID)
->OrderBy('gatestmodels.ID')
->get()
;
foreach($models as $model)
{
$segment = "sessions::condition::ga:pagePath=~/".$make->MaskingName."-cars/".$model->MaskingName."/";
$data = $analytics
->data_ga
->get(
'ga:' . $this->profile_ids[0],
$this->start_date,
$this->end_date,
$metrics,
$segment
)
;
}
如果您希望將其設置為單個文件,則據我所知有兩種方法。
1)您可以添加一列is_analytics_done默認為0,並在分析完成后將其更新為1,在獲取記錄的同時,您可以在查詢中獲得is_analytics_done = 0的前350條記錄
2)如果您將cron作業設置為每2小時執行一次,則可以通過獲取當前時間來在cron文件中添加一個切換用例
<?php
$getCurrentTime = Carbon::now()->hour;
switch ($getCurrentTime) {
case '2':
// get first 350 records
break;
case '4':
// get second 350 records
break;
case '6':
// get third 350 records
break;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.