प्रोग्राम को नोड से फ़ील्ड को कैसे हटाया जा सकता है? मेरे पास एक माइग्रेशन है hook_update_N
जो एक फ़ील्ड से सामग्री को एक कस्टम टेबल में ले जाती है। उस माइग्रेशन के बाद, मैं उसी फंक्शन में फील्ड को हटाना चाहता हूं।
क्या कोई फ़ील्ड API है जो फ़ील्ड्स निकालना है?
संपादित करें, समाधान : क्योंकि उत्तरों में वास्तविक कोड का अभाव है, यहां मैंने $ उपयोगकर्ताओं से फ़ील्ड को अपने रिकॉर्ड में स्थानांतरित करने के लिए किया और बाद में डेटाबेस से फ़ील्ड को हटा दिया;
function my_module_update_7005(&$sandbox) {
$slice = 100;
//Fetch users from database;
if (!isset($sandbox['progress'])) {
$sandbox['progress'] = 0;
$sandbox['current_uid'] = 0;
// We'll -1 to disregard the uid 0...
$sandbox['max'] = db_query('SELECT COUNT(DISTINCT uid) FROM {users}')->fetchField() - 1;
}
if (empty($users)) {
$sandbox["current_uid"] += $slice;
}
$users = db_select('users', 'u')
->fields('u', array('uid', 'name'))
->condition('uid', $sandbox['current_uid'], '>')
->range(0, $slice)
->orderBy('uid', 'ASC')
->execute();
//Loop trough users;
foreach ($users as $user) {
$foo = new Foo();
// Warning: drupal's fields return mixed values; e.g. NULL versus an int.
$foo->debits = (int) $user->user()->field_credits["und"][0]["value"];
$foo->save();
$sandbox['progress']++;
$sandbox['current_uid'] = $user->uid;
}
$sandbox['#finished'] = empty($sandbox['max']) ? 1 : ($sandbox['progress'] / $sandbox['max']);
// Remove the field.
field_delete_field("field_credits"); //note that the name for Foo is field_foo
field_purge_batch($sandbox['max']+1);//Drupal seems to have an offbyone problem.
}
field_purge_batch
हालांकि