Làm cách nào chúng ta có thể xóa các trường khỏi nhiều bảng bằng db_delete()
và INNER JOIN
trong Drupal 7?
Làm cách nào chúng ta có thể xóa các trường khỏi nhiều bảng bằng db_delete()
và INNER JOIN
trong Drupal 7?
Câu trả lời:
Bạn không thể sợ.
db_delete()
lấy một tham số chuỗi đơn để xác định bảng nào sẽ chạy truy vấn. Không có phạm vi để cung cấp nhiều hơn một bảng cùng một lúc.
Bạn có thể chạy bất kỳ câu lệnh SQL nào bạn thích, tuy nhiên, với db_query()
, vd.
// Deletes all nodes and related author users...please don't actually run this!!
$sql = 'DELETE u, n FROM {node} n INNER JOIN {users} u ON u.uid = n.uid';
db_query($sql);
Có, db_delete có một tham số duy nhất. Bạn phải gọi db_delete()
nhiều lần để xóa dữ liệu từ nhiều bảng. Vui lòng xem mã mẫu sau:
/**
* Implements hook_menu_delete().
*/
function block_menu_delete($menu) {
db_delete('block')
->condition('module', 'menu')
->condition('delta', $menu['menu_name'])
->execute();
db_delete('block_role')
->condition('module', 'menu')
->condition('delta', $menu['menu_name'])
->execute();
}
Liên kết nguồn:
https://github.com/drupal/drupal/blob/7.x/modules/block/block.module
https://api.drupal.org/api/drupal/modules%21block%21block.module/ 7.x
db_delete
có một tham số duy nhất, mà không cho phép một bí danh, là gây phiền nhiễu. Nếu không, có thể sử dụng THAM GIA tương tự như db_select.