Привет, всем.
Есть код который парсит данные по api цены на предмет в разных городах
foreach (Items::find()->where(['in_market' => 1])->all() as $item){
foreach (Cityes::find()->all() as $city){
/**
* @var $city Cityes
*/
$price = $this->getApiPrice($item->unique_name , $item->enchantment_level , $city->unique_name , $item->quality);
if ($price){
$model = new Prices();
$model->item_id = $item->id;
$model->city_name = $city->unique_name;
$model->sell_price_min = $price[0]['sell_price_min'];
$model->sell_price_max = $price[0]['sell_price_max'];
$model->sell_price_date = '';
$model->buy_price_min = $price[0]['buy_price_min'];
$model->buy_price_max = $price[0]['buy_price_max'];
$model->buy_price_date = '';
$model->save();
}
}
}
Его проблема в том, что он упирается во время выполнения скрипта. Я его немного допилил.
foreach (Items::find()->where(['in_market' => 1])->limit(1)->offset(Yii::$app->request->get()['offset'])->all() as $item){
foreach (Cityes::find()->all() as $city){
/**
* @var $city Cityes
*/
$price = $this->getApiPrice($item->unique_name , $item->enchantment_level , $city->unique_name , $item->quality);
if ($price){
$model = new Prices();
$model->item_id = $item->id;
$model->city_name = $city->unique_name;
$model->sell_price_min = $price[0]['sell_price_min'];
$model->sell_price_max = $price[0]['sell_price_max'];
$model->sell_price_date = '';
$model->buy_price_min = $price[0]['buy_price_min'];
$model->buy_price_max = $price[0]['buy_price_max'];
$model->buy_price_date = '';
$model->save();
}
}
}
if (Items::find()->where(['in_market' => 1])->count() > Yii::$app->request->get()['offset']){
return Yii::$app->response->redirect(['site/import-data' , 'data' => 'price' , 'offset' => Yii::$app->request->get()['offset'] + 1]);
}
Но таким образом я упираюсь в количество редиректов.
Подскажите можно ли как то запросы бить на группы, либо ещё какие то варианты.
Продлевать время выполнения скрипта, это плохой вариант, есть ли ещё варианты.