web-dev-qa-db-ja.com

Drupal 7日付-データがすでにある場合にフィールド設定を変更する方法はありますか?

現在drupal 7の日付モジュールを使用しており、既存の日付フィールドにデータを既に保存しています。「繰り返し日付」を追加して日付フィールドを変更したいのですが、明らかに私はすでにそこにデータを持っているのでできません。私が思いついたオプションは次のとおりです:

  1. 追加の「繰り返し日付」機能を使用して、コンテンツタイプの完全に新しい日付フィールドを作成します。次に、すべての古い日付を新しいフィールドにコピーします(これを簡単に行う方法がわかりません)

  2. Phpmyadminまたはmysqlコンソールを介して既存の日付フィールドテーブルを変更します。

すでにデータがある既存のフィールドを更新するために推奨される方法は何ですか?

2

この投稿モジュールもご覧ください https://www.drupal.org/project/entity_recur

0
jayxdev

データベースに触れるよりも安全な方法...

  1. 最初に、繰り返しの日付で新しいフィールドを作成します。これをfield_event_dateとしましょう
  2. 次に、最初のフィールド(field_date)から新しいフィールドにすべてをコピーします。

コード:

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', {your_content_type})
  ->addMetaData('account', user_load(1));

$result = $query->execute();
foreach($result['node'] as $nid => $n) {
  $node = node_load($nid);
  $node->field_event_date = $node->field_date;  // Copy one field to another
  node_save($node);
}  
2
lahode

コードを記述せずに次のようにしてこれを機能させました。これは、DATEタイプのフィールドに対してのみ行うことに注意してください。

例:

私の古いフィールド:field_eventdate

私の新しいフィールド:field_placeholder

  1. 異なる名前と必要なオプションで同じフィールドタイプを作成します。
  2. phpmyadminを開く
  3. テーブルに移動します:field_config
  4. 作成した新しいフィールドを検索します(field_placeholder)
  5. データ列blobをクリックしてダウンロードします。
  6. 検索してedit field_eventdateとし、ダウンロードした新しい設定を含むファイルをアップロードします。
  7. テーブルに対してもまったく同じことを行います:field_config_instance
  8. 次に、これらの変更を含むようにフィールドのテーブル構造を更新する必要があります。最初に、作成した新しいフィールドの構造を調べて、古いテーブルに何が欠けているかを確認しました。それが終わったら、新しいフィールドに存在する古いフィールドに不足している列を作成します。
  9. もう一度#8を実行しますが、今回はリビジョンテーブルを使用します。私の場合、それは次のようになります:field_revision_eventdate
  10. 不要になるため、コンテンツタイプページからfield_placeholderを削除します。

これが他の誰でもうまくいくかどうか私に知らせてください。

2

最初に、機能を使用して元の日付フィールドをキャプチャしました。次に、ターゲットにしたいフィールド(プレースホルダーで行ったのと同じようなもの)を作成し、Featuresでエクスポートしました。エクスポートされたコードを比較し、元のフィールドの機能エクスポートコードを更新し、field_data_field_ ..テーブルからデータをSQLダンプし、[フィールドの管理]画面で元のフィールドを削除し、変更された機能エクスポートコードに機能を戻し、SQLインポートしました。私の輸出から。出来上がり!

1
texas-bronius