多数の計算フィールドを含む Drupal コンテンツ タイプがあります。cron によってトリガーされる RSS フィード インポーターを介して、一部の (すべてではない) アイテムがこのコンテンツ タイプに追加されています。hook_cron で新しいアイテムの計算フィールド生成をトリガーしようとしています。次のコードは、「送信済み」としてタグ付けされていないすべてのアイテムを取得し、ノードをロードして再保存し、ノードを「送信済み」としてマークします。
$query = db_select('node', 'n');
$query->fields('n', array('nid'));
$table_alias = $query->join('field_data_field_submitted', 'r', 'n.nid = r.entity_id AND r.field_submitted_value = 0');
$result = $query->execute();
foreach ($result as $record){
$q = $record->nid;
$n = node_load($q);
node_save($n);
$query = db_update('field_data_field_submitted')
->fields(array('field_submitted_value' => 1))
->condition('entity_id', $q)
->execute();
}
このコードは、モジュールで生成されたページ (ページ コールバック関数で hook_menu を使用して作成) から呼び出すと、期待どおりに機能します。ノードが再送信され、計算フィールド データが生成されます。このコードを hook_cron 関数に入れると、クエリが機能し、レコードをループして「送信された」値を更新しますが、計算フィールドは計算されません。これがcronでトリガーされない理由について混乱しています。何か助けはありますか?