[英]Moving Yii controller action into cron job
我以此网站为指南在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作业,但未获得任何结果,并且不确定如何对其进行故障排除。
您可以使用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();
}
在cron工作
// 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();
}
并在需要时调用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.