কীভাবে প্রোগ্রাম থেকে কোনও নোড থেকে একটি ক্ষেত্র সরিয়ে ফেলতে পারে? আমার একটি স্থানান্তর আছে 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যদিও জানা ভাল