@Iossarian

Почему cron не проходится по foreach?

Есть код генерации актов. Акты генерятся для юзеров с определенной ролью. Если запустить скрипт с площадки, то все отрабатывает, но если запустить через cron, то foreach отрабатывает на первый айдишник и прекращает работу. С чем это может быть связано? Или можно как-то логи ошибок вывести из крона? В var/log/syslog ошибок нет. Сам код экшена
public function actionAdd()
    {
        //Получение кураторов
        $query = $query = new Query();
        $curators = $query->select(['user_id'])
            ->from('auth_assignment')
            ->where(['item_name' => 'curator'])
            ->distinct()
            ->all();
        //Получение стоимости полюсов

        foreach ($curators as $curator) {
            $model = PaymentInfo::find()->where(['user_id' => $curator['user_id']])->one();
            if (isset($model)) {

                $policies = PolicyPayed::find()->where(['id_seller' => $curator['user_id']])
                    ->andWhere(['between', 'date_payed', date('Y-m-d H:i:s', strtotime('-1 week')), date('Y-m-d H:i:s', strtotime('-1 day'))])->all();
                if (isset($policies)) {
                    $amount = round(array_sum(array_column($policies, 'cost')) / 100 * 9, 2);
                    //Получение последней записи для заполнения поля 'Number'
                    $id = Act::find()->max('id');
                    $last = Act::find()->where(['id' => $id])->one();

                    $act = new Act();
                    $act->user_id = $curator['user_id'];
                    $act->name = $model->name;
                    $act->inn = $model->inn;
                    $act->kpp = $model->kpp;
                    $act->legal_address = $model->legal_address;
                    $act->date_begin = date('Y-m-d H:i:s', strtotime('-1 week'));
                    $act->date_end = date('Y-m-d H:i:s', strtotime('-1 day'));
                    $act->payment_id = $model->id;
                    $act->amount = $amount;
                    (isset($last->number)) ? $act->number = $last->number + 1 : $act->number = 25;

                    $act->save();
                }
            }
        }

    }
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Или можно как-то логи ошибок вывести из крона?

Например:
Yii::info(count($curators),'my_info_category');
....
if(!$act->save()){
   Yii::error(Json::encode($act->firstErrors),'my_error_category');
}


офтоп:
вот это
$model = PaymentInfo::find()->where(['user_id' => $curator['user_id']])->one();
            if (isset($model)) 
{

можно записать так
if($model = PaymentInfo::find()->where(['user_id' => $curator['user_id']])->one())
{

Но почему бы PaymentInfo не выбирать через связь жадной загрузкой. У Вас же так при каждом проходе цикла идет запрос в БД.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы