কীভাবে প্রোগ্রাম থেকে কোনও নোড থেকে একটি ক্ষেত্র সরিয়ে ফেলতে পারে? আমার একটি স্থানান্তর আছে hook_update_N
যা এএ ক্ষেত্র থেকে সামগ্রীগুলি একটি কাস্টম টেবিলের দিকে নিয়ে যায়। সেই স্থানান্তরের পরে, আমি একই ফাংশনে ক্ষেত্রটি সরাতে চাই।
ক্ষেত্র অপসারণের ক্ষেত্রের এমন কোনও ফিল্ড এপিআই রয়েছে?
সম্পাদনা, সমাধান : কারণ উত্তরগুলির প্রকৃত কোডের অভাব রয়েছে, কারণ আমি ব্যবহারকারীদের থেকে ক্ষেত্রগুলিকে আমার নিজের রেকর্ডে স্থানান্তর করতে এবং পরবর্তীকালে ডাটাবেস থেকে ক্ষেত্রটি সরাতে এখানে যা করেছি;
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
যদিও জানা ভাল