2013-01-20 28 views
0

我正在使用此site作爲在yii中設置cron作業的指南。將Yii控制器動作移動到cron作業中

當我將給定值(Value2)從「A」更改爲「B」時,TableA中的當前控制器操作(更新)將執行sql事務以在我的db中填充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(); 
    } 
} 

我需要建立在表B的新紀錄,但是從「A」到「B」

我已經嘗試運行此cron作業,但沒有得到任何結果,並不能確定在表A還更新值2如何去解決它。

回答

0

你可以使用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(); 
} 

,並調用它,當你需要