0

yii で cron ジョブをセットアップするためのガイドラインとして このサイトを使用しています。

TableA の現在のコントローラー アクション (更新) は、特定の値 (Value2) を "A" から "B" に変更すると、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 ジョブを実行しようとしましたが、結果が得られず、トラブルシューティングの方法もわかりません。

4

1 に答える 1

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();
}

そして、必要なときにそれを呼び出します

于 2013-01-21T04:25:42.977 に答える