2016-08-12 84 views
0

我想遍历我的Laravel应用程序中的1000个数据库记录,以获取每个单独记录的Google分析数据。与Google Analytics API的连接大约在1小时后关闭,因此我无法使用foreach循环一次遍历所有这1000条记录。我一次可以迭代大约350条记录,例如在这1小时内。如何使用crontab在php中循环使用循环中的元素

我想使用调度程序运行我的PHP代码,例如nginx crontab。我想知道如何在调度程序的特定时间处理前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 
     ) 
    ; 
} 

回答

0

如果你想让它设置为一个单一的文件里面有我认识的两种方式。

1)您可以添加一列is_analytics_done默认为0,做分析后,将其更新为1,同时获得记录你可以在你的查询

2)如果你第一次350个记录is_analytics_done = 0将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; 

}