Làm thế nào để loại bỏ một trường từ một nút lập trình? Tôi có một di chuyển trong hook_update_N
đó di chuyển nội dung từ trường aa vào một bảng tùy chỉnh. Sau khi di chuyển, tôi muốn loại bỏ trường trong cùng chức năng đó.
Có bất kỳ API trường nào phục vụ loại bỏ các trường không?
Chỉnh sửa, Giải pháp : Vì các câu trả lời thiếu mã thực tế, đây là những gì tôi đã làm để chuyển các trường từ người dùng $ vào hồ sơ của riêng tôi và sau đó xóa trường khỏi cơ sở dữ liệu;
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
Mặc dù vậy cũng tốt để biết