【问题标题】:Moving Yii controller action into cron job将 Yii 控制器动作转移到 cron 作业中
【发布时间】:2013-01-20 21:12:27
【问题描述】:

我使用site 作为在 yii 中设置 cron 作业的指南。

当我将给定值 (Value2) 从“A”更改为“B”时,我在 TableA(更新)中的当前控制器操作将执行一个 sql 事务以填充我的数据库中的 TableB。

这是我目前用来完成此操作的代码。这是我在控制器 A 中的更新操作

$connection = yii::app()->db;
$sql1 = "INSERT INTO TableB (value1, value2, value3)
     VALUES(:val1, :val2, :val3)";
$command=$connection->createCommand($sql1);
$command->bindValue(":val1", $model->tableAId);
$command->bindValue(":val2", 'B');
$command->bindValue(":val3", $model->Attribute2);
$command->execute();

由于我使用的是 bindValue,因此很容易将我的值输入到不同的表中。将此逻辑移动到 cron 作业中,我不知道从哪里开始执行相同的事情。

那么在 cron 作业中使用类似的代码,这是否会同样有效?

public function run($args)
{
    $transactions = TableA::model()
    ->findBySql('SELECT * FROM `TableA` '.
    'WHERE `value2` = A '.
    'AND TO_DAYS(`DateCreated`)+3 < TO_DAYS(NOW())');
    foreach ($transactions as $transaction) {
        $connection = yii::app()->db;
        $sql1 = "INSERT INTO tableB (value1, value2, value3)
             VALUES(:val1, :val2, :val3)";
        $command=$connection->createCommand($sql1);
        $command->bindValue(":val1", $model->tableAId);
        $command->bindValue(":val2", 'B');
        $command->bindValue(":val3", $model->Attribute2);
        $command->execute();
    }
}

我需要在 TableB 中创建一条新记录,但还要将 TableA 中的 value2 从“A”更新为“B”

我已经尝试运行这个 cron 作业,但没有得到任何结果,也不知道如何进行故障排除。

【问题讨论】:

    标签: php mysql yii cron


    【解决方案1】:

    可以使用 TableA 和 TableB 模型吗?

    在控制器 A 中:

    $model = $this->loadModel();
    $model->value2 = 'B';
    if ($model->save()) {
       $modelB = new TableB();
       $modelB->value1 = $model->value1;
       $modelB->value2 = $model->value2;
       $modelB->value3 = $model->value3;
       $modelB->save();
    }
    

    在定时任务中

    // find all
    $transactions = TableA::model()->findAll(array('condition' => array(
      'value2 = :A',
      new CDbExpression('TO_DAYS(`DateCreated`)+3 < TO_DAYS(NOW())'),
    ), 'params' => array( ':A' => 'A')));
    foreach ($transactions as $transaction) {
        $model->value2 = 'B';
        if ($model->save()) {
            $modelB = new TableB();
            $modelB->value1 = $model->value1;
            $modelB->value2 = $model->value2;
            $modelB->value3 = $model->value3;
            $modelB->save();
        }
    }
    

    或者你也可以在modelA中创建函数:

    public function createB()
    {
        $modelB = new TableB();
        $modelB->value1 = $model->value1;
        $modelB->value2 = $model->value2;
        $modelB->value3 = $model->value3;
        $modelB->save();
    }
    

    并在需要时调用它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多