簡體   English   中英

如何使用crontab在PHP中使用for循環批量迭代元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM